设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 6009|回复: 8
打印 上一主题 下一主题

scrapy post请求使用mata参数传递表单中的参数,报错

[复制链接]

1

主题

0

好友

17

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2018-5-1 14:58:41 |只看该作者 |倒序浏览
class QingHaiSpider(scrapy.Spider):
    name = "qinghai"
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36', 'Accept': 'application/json, text/javascript, */*; q=0.01'}
    results = {"001002":"01", "001001":"02", "001005":"03"}
    def start_requests(self):
        url = 'http://111.44.251.34/inteligentsearch/rest/inteligentSearch/getFullTextData'
        for k in self.results:
            formdata1 = {"token":"","pn":0,"rn":10,"sdt":"","edt":"","wd":"","inc_wd":"","exc_wd":"","fields":"title","cnum":"001;002;003;004;005;006;007;008;009;010","sort":"{\"showdate\":\"0\"}","ssort":"title","cl":200,"terminal":"","condition":[{"fieldName":"categorynum","isLike":True,"likeType":2,"equal":k}],"time":None,"highlights":"title","statistics":None,"unionCondition":None,"accuracy":"100","noParticiple":"0","searchRange":None,"isBusiness":1}
            formdata = json.dumps(formdata1)
            request = scrapy.Request(url=url, method='POST', body=formdata ,headers=self.headers, callback=self.parse, dont_filter=False, meta={'key':k})

            yield request


    def parse(self, response):
        w = response.meta['key']
        max_counts = json.loads(response.text)["result"]["totalcount"]
        datas = json.loads(response.text)["result"]["records"]
        for data in datas:
            item = QhItem()
            item["title"] = data["title"]
            item["date"] = data["showdate"]
            item["detail_url"] = "http://111.44.251.34" + data["linkurl"]
            item["area_code"] = "QINGHAI"
            item["publish_id"] = "181818"
            item["thing_id"] = "42"
            if "001002" in item["detail_url"]:
                item["content_type"] = "01"

            elif "001001" in item["detail_url"]:
                item["content_type"] = "02"
            else:
                item["content_type"] = "03"

            yield item


        for i in range(10, max_counts + 10, 10):

            formdata2 = {"token":"","pn":i,"rn":10,"sdt":"","edt":"","wd":"","inc_wd":"","exc_wd":"","fields":"title","cnum":"001;002;003;004;005;006;007;008;009;010","sort":"{\"showdate\":\"0\"}","ssort":"title","cl":200,"terminal":"","condition":[{"fieldName":"categorynum","isLike":True,"likeType":2,"equal":w}],"time":None,"highlights":"title","statistics":None,"unionCondition":None,"accuracy":"100","noParticiple":"0","searchRange":None,"isBusiness":1}
            formdata = json.dumps(formdata2)
            url = 'http://111.44.251.34/inteligentsearch/rest/inteligentSearch/getFullTextData'
            yield scrapy.Request(url=url, method='POST', body=formdata ,headers=self.headers, callback=self.parse, dont_filter=False)
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2018-5-1 15:57:53 |只看该作者
报错信息呢?
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

17

积分

新手上路

Rank: 1

板凳
发表于 2018-5-1 16:25:52 |只看该作者
crossin先生 发表于 2018-5-1 15:57
报错信息呢?

KeyError: 'key',这个报错很容易看懂,字典中实际是有的。
回复

使用道具 举报

1

主题

0

好友

17

积分

新手上路

Rank: 1

地板
发表于 2018-5-1 16:29:34 |只看该作者
crossin先生 发表于 2018-5-1 15:57
报错信息呢?

crossin老师,其实我想问的就是post请求,因为url地址不变,如果增量爬取,那就是post表单中数据变化,比如我这个的Post请求表单中"pn"表示页数,0是第一页,10是第二页,20是第三页.....那我遍历递增到最大页数,这样写是没问题的呀?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2018-5-1 23:50:14 |只看该作者
kkw1201 发表于 2018-5-1 16:29
crossin老师,其实我想问的就是post请求,因为url地址不变,如果增量爬取,那就是post表单中数据变化,比 ...

你确认对方服务器接受的就是这种参数形式那就没问题
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

17

积分

新手上路

Rank: 1

6#
发表于 2018-5-3 09:55:20 |只看该作者
crossin先生 发表于 2018-5-1 23:50
你确认对方服务器接受的就是这种参数形式那就没问题

恩,但是现在的问题是爬取重复,而且爬虫好像停不下来,一直在爬。不知道代码哪里不对
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2018-5-3 12:30:24 |只看该作者
kkw1201 发表于 2018-5-3 09:55
恩,但是现在的问题是爬取重复,而且爬虫好像停不下来,一直在爬。不知道代码哪里不对 ...

那这是你自己代码逻辑,你要自己调试
scrapy本身不会帮你自动去重
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

17

积分

新手上路

Rank: 1

8#
发表于 2018-5-3 14:19:29 |只看该作者
crossin先生 发表于 2018-5-3 12:30
那这是你自己代码逻辑,你要自己调试
scrapy本身不会帮你自动去重

emmmm.我自己debug好像没啥问题。。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2018-5-3 23:19:36 |只看该作者
kkw1201 发表于 2018-5-3 14:19
emmmm.我自己debug好像没啥问题。。

遇到重复的就跳过
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-21 21:35 , Processed in 0.024221 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部