Scrapy FormRequest函数中的meta参数值应该如何设置? 80C

我用scrapy进行爬虫,解析函数部分另有下一级回调函数,代码如下:

item = SoccerDataItem()
for i in range(1, 8):
        item['player' + str(i + 1)] = players[i]
for j in range(1, 8):  
    home_sub_list = response.xpath('//div[@class="left"]//li[@class="pl10"]')  
        if home_sub_list[j - 1].xpath('./span/img[contains(@src,"subs_up")]'):  
            item['player' + str(j)]['name'] = home_sub_list[j - 1].xpath('./div[@class="ml10"]').xpath('string(.)').re_first('\d{1,2}\xa0\xa0(.*)')
            item['player' + str(j)]['team_stand'] = 1
            item['player' + str(j)]['is_startup'] = 0
            item['player' + str(j)]['is_subs_up'] = 1
            item['player' + str(j)]['subs_up_time'] = home_sub_list[j].xpath('./span/img[contains(@src,"subs_up")]/following-sibling::span').xpath('string(.)').extract_first(default='')
            yield scrapy.FormRequest(url=data_site, formdata=formdata, meta={'player': item['player' + str(j)]}, callback=self.parse_data)

        else:
            item['player' + str(j)]['name'] = home_sub_list[j-1].xpath('./div[@class="ml10"]').xpath('string(.)').re_first('\d{1,2}\xa0\xa0(.*)')
      item['player' + str(j)]['team_stand'] = 1
      item['player' + str(j)]['is_startup'] = 0
            item['player' + str(j)]['is_subs_up'] = 0

然而运行后一直在报错:

 callback=self.parse_data)
  File "c:\users\pc1\appdata\local\programs\python\python36-32\lib\site-packages\scrapy\http\request\form.py", line 31, in __init__
    querystr = _urlencode(items, self.encoding)
  File "c:\users\pc1\appdata\local\programs\python\python36-32\lib\site-packages\scrapy\http\request\form.py", line 66, in _urlencode
    for k, vs in seq
  File "c:\users\pc1\appdata\local\programs\python\python36-32\lib\site-packages\scrapy\http\request\form.py", line 67, in <listcomp>
    for v in (vs if is_listlike(vs) else [vs])]
  File "c:\users\pc1\appdata\local\programs\python\python36-32\lib\site-packages\scrapy\utils\python.py", line 119, in to_bytes
    'object, got %s' % type(text).__name__)
TypeError: to_bytes must receive a unicode, str or bytes object, got int

据本人百度得知,meta当中的键值对的值应为字符串,字节等类型,这正是当我传入字典类型时报错的原因。
可是,请问我应该如何修改此处呢?

PS:本人所用编程语言为Python,排版可能会引起读者不适,望谅解!

2个回答

问题不在meta,在formdata,你的formdata里面一定是有int类型的值了,改成str即可。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
【帮帮孩子】scrapy框架请问如何在parse函数中调用已有的参数来构造post请求获得回传的数据包呀

刚接触scrapy框架一周的菜鸟,之前都没用过框架手撸爬虫的,这次遇到了一个问题,我先请求一个网页 ``` def start_requests(self): urls=["http://www.tiku.cn/index/index/questions?cid=14&cno=1&unitid=800417&chapterid=701354&typeid=600122&thrknowid=700137"] for url in urls: yield scrapy.Request(url=url,callback=self.parse) ``` 然后传给parse方法获得了question_ID这个关键参数,然后我想在这里面直接利用这个question_id这个参数构造post请求获得它回传的json数据包并保存在 item['正确答案']之中,请问我要如何实现?,谢谢大佬百忙之中抽空回答我的疑问,谢谢! ``` def parse(self, response): item = TikuItem () for i in range(1,11): QUESTION_ID=str(response.xpath('(/html/body/div[4]/div[2]/div[2]/div['+str(i)+']/div[@class="q-analysis text-l"]/@id)').extract_first()[3:]) item['question_ID']=QUESTION_ID ``` 这是我的items.py文件 ``` class TikuItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() question_ID=scrapy.Field()#题号 correct_answer=scrapy.Field()#正确答案 ```

SCRAPY模拟登陆链接重定向问题

scrapy模拟登陆不能抓取到数据 模拟登陆没有跳转到抓取页面 真实去登陆账号不能再次的登陆了 不知道问题出在哪里求大神解答 ``` # -*- coding: utf-8 -*- import scrapy from scrapy.http import Request, FormRequest from scrapy.selector import Selector from scrapy.conf import settings class faxinSpider(scrapy.Spider): name = "faxin" allowed_domains = ["www.faxin.cn"] start_urls = ["http://www.faxin.cn/keyword/index.aspx"] headers = settings.get('HEADERS') def start_requests(self): return [Request( url = "http://www.faxin.cn/login.aspx", meta = {'cookiejar' : 1}, headers = self.headers, callback=self.post_login )] def post_login(self, response): viewstate = Selector(response).xpath('//input[@name="__VIEWSTATE"]/@value').extract()[0] self.logger.info("--viewstate--:%s", viewstate) return [FormRequest.from_response( response, meta = {'cookiejar' : response.meta['cookiejar']}, headers = self.headers, formdata = { '__VIEWSTATE' : viewstate, 'WebUCHead_Special1$hiddIsLogin' : '0', 'user_name' : '****', 'user_password' : '****' }, callback = self.pares_page, )] def after_login(self, response): for url in self.start_urls : yield Request(url, headers = self.headers, meta = {'cookiejar' : response.meta['cookiejar']}, callback = self.pares_page) def pares_page(self, response): url_ = response.url self.logger.info("---url---: %s", url_) # a = Selector(response).xpath("//a[@class='login']/@title") # self.logger.info("---username---: %s", a) a_ = Selector(response).xpath("//div[@class='t_box']/ul[@class='clearfix']/li") for a in a_: print a.xpath("a/@href").extract()[0] ``` ![图片说明](https://img-ask.csdn.net/upload/201608/08/1470627853_272427.png)

scrapy中 parse函数没有被调用

代码没有问题为什么parse不会被调用![![![图片说明](https://img-ask.csdn.net/upload/201711/09/1510159504_917150.png)图片说明](https://img-ask.csdn.net/upload/201711/09/1510159495_85511.png)图片说明](https://img-ask.csdn.net/upload/201711/09/1510159485_677541.png)

scrapy发起请求的url是拼接的,但是拼接时需要用到response中的参数,这种矛盾怎么解决啊?

scrapy发起请求的url是拼接的,但是拼接时需要用到response中的参数,这种矛盾怎么解决啊?请大神给个思路!

scrapy中Spider中的变量如何传递给Middleware中的request中

在获取了response响应中的内容后,需要将response的部分内容更新到cookie中。 但是获取response的内容实在自定义的parse函数中,而更新cookie是在Middleware中的process\_request()中,那如何将Spider中的parse函数中的变量传递到Middleware中的process\_request中呢? 下边是我的函数 ![图片说明](https://img-ask.csdn.net/upload/201906/03/1559527420_478414.png) 以上还请大神指点一下~~

没有进行筛选,scrapy-Request callback不调用,跪求大神指点!!!

Spider的代码是这样的: ``` def parse(self, response): url_list = response.xpath('//a/@href').extract()[0] for single_url in url_list: url = 'https:' + single_url.xpath('./@href').extract()[0] name = single_url.xpath('./text()').extract()[0] yield scrapy.Request(url=url, callback=self.parse_get, meta={'url':url, 'name':name}) def parse_get(self, response): print(1) item = MySpiderItem() item['name'] = response.mate['name'] item['url'] = response.mate['url'] yield item ``` middlewares的代码是这样的: ``` def process_request(self, request, spider): self.driver = webdriver.Chrome() self.driver.get(request.url) if 'anime' in request.meta: element = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'header'))) else: element = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'header'))) html = self.driver.page_source self.driver.quit() return scrapy.http.HtmlResponse(url=request.url, body=html, request=request, encoding='utf-8') ``` 我是用Chrome来运行的,Request里面的url是一个一个地打开了,但是一直没有调用parse_get。一直都没有加allowed_domains,也尝试过在Request中加dont_filter=True,但是网站能打开,证明应该不是网站被过滤了的问题。实在是没有想法了,求大神指导!!!!

scrapy每个url提取的数据保存不同的表中,几百个url?

scrapy每个url提取的数据保存mongobd不同的集合zhong,几百个url? 各位大佬怎么处理帮帮忙! 不知道怎么处理 ``` # -*- coding: utf-8 -*- import scrapy from dongQiuDi.items import DongqiudiItem import time class ZuqiuSpider(scrapy.Spider): name = 'zuqiu' allowed_domains = ['dongqiudi.com'] start_urls = [ "https://www.dongqiudi.com/data/1", 'https://www.dongqiudi.com/data/2', "https://www.dongqiudi.com/data/3", "https://www.dongqiudi.com/data/4", "https://www.dongqiudi.com/data/5", "https://www.dongqiudi.com/data/10", "https://www.dongqiudi.com/data/16", "https://www.dongqiudi.com/data/12", "https://www.dongqiudi.com/data/16", "https://www.dongqiudi.com/data/19", #土超 "https://www.dongqiudi.com/data/55", "https://www.dongqiudi.com/data/17", "https://www.dongqiudi.com/data/18", "https://www.dongqiudi.com/data/20", #巴西 "https://www.dongqiudi.com/data/21", #阿根廷 "https://www.dongqiudi.com/data/68", #卡特尔 "https://www.dongqiudi.com/data/69", #伊朗 "https://www.dongqiudi.com/data/71", #乌兹别克 ] def parse(self, response): p_list = response.xpath(".//div[@class='team_point_ranking']/div/div/div/p") for p in p_list: item = DongqiudiItem() item['No'] = p.xpath( "./span[1]/text()").extract_first() item['image'] = p.xpath( "./span[2]/img/@src").extract_first() item['name'] = p.xpath( "./span[2]/b/text()").extract_first() item['sestion'] = p.xpath( "./span[3]/text()").extract_first() item['win'] = p.xpath( "./span[4]/text()").extract_first() item['mean'] = p.xpath( "./span[5]/text()").extract_first() item['lose'] = p.xpath( "./span[6]/text()").extract_first() item['coal'] = p.xpath( "./span[7]/text()").extract_first() item['fumbole'] = p.xpath( "./span[8]/text()").extract_first() item['goaldifference'] = p.xpath( "./span[9]/text()").extract_first() item['score'] = p.xpath( "./span[10]/text()").extract_first() yield item time.sleep(1) #每一个URL,暂停一秒 ```

由scrapy异步,导致cookie在scrapy中储存过久,cookie值失效,该怎么办?

由scrapy异步,导致cookie在scrapy中储存过久,cookie值失效,该怎么办?

scrapy爬虫post请求,参数以回车隔开如何爬取

我再爬取一个ashx网页时,它的post请求参数是已回车换行隔开的而不是以'&'符号,我在spider里应该怎么写呢,求赐教 网页是:http://www.lzggzyjy.cn/InfoPage/InfoList.aspx?SiteItem=38 我这样写: def start_requests(self): body1={'currentPage':'1','Query':''} yield FormRequest('http://www.lzggzyjy.cn/ajax/Controls_InfoListControl,App_Web_czrtjgzk.ashx?_method=getCurrentData&_session=rw', headers = {"Content-Type": "text/plain;charset=UTF-8"},callback=self.parse,formdata=body1,method ='POST',cookies= {"ASP.NET_SessionId":"qpzxibfguvi452oujhorwdi5","SERVERID":"0c51fcf27e5a43864444c2a531b3c0e0|1482238131|1482234645"}) 报错:new Object();r.error = new ajax_error('System.ArgumentException','类型“System.DBNull”的对象无法转换为类型“System.Int32”。',0)

scrapy在settdings.py中已经设置好了DEFAULT_REQUEST_HEADERS,在发起请求的时候应该怎么写headers?

scrapy在settdings.py中已经设置好了DEFAULT_REQUEST_HEADERS,在发起请求的时候应该怎么写headers?

Scrapy 中关于 request 和 yield 的问题,求大佬帮忙··

我目前需要爬取某个网页的一些指标,其中有一个是判断网页中是否有robots.txt文件,这个指标我的判断的方法是访问’www.baidu.com/robots.txt‘,根据其response.code判断,但是我想把这个指标和其他指标放到一个item里,请问应该怎么做。 我本想用yield scrapy.request(‘www.baidu.com/robots.txt’)来操作,但是获取不到其返回值,而且yield和return不能同时存在,望各位大佬解答一下,万分感激。 鄙人QQ642026725,欢迎各位大佬指导,萌新不胜感激

scrapy request发生重定向问题

from scrapy.spider import CrawlSpider from scrapy.selector import Selector from scrapy.http import Request class Spider(CrawlSpider): name = 'wordSpider' NUM = 14220485 start_urls = [ "http://baike.baidu.com/view/1.htm" ] fi = open('e:/word.txt', 'w') cnt = 2 def parse(self,response): selector = Selector(response) word = selector.xpath('body/div[@class="body-wrapper"]/div[@class="content-wrapper"]/div[@class="content"]/div[@class="main-content"]/dl/dd/h1/text()').extract_first() #word = selector.xpath('body/div[@id="J-lemma"]/div[@class="body-wrapper"]/div[@class="card-part"]/span[@class="lemma-title"]/text()').extract() self.fi.write(word + '\t' + 'n') if self.cnt <= self.NUM: wurl = "http://baike.baidu.com/view/%s.htm" % self.cnt self.cnt += 1 yield Request(url=wurl, meta={}, callback=self.parse) 这是我的爬虫源码,如何阻止301/302重定向,要抓取的是百度所有词条,但是总会发生重定向导致无法获得想要的网页

scrapy设置代理 IP 无法爬去

middewares里: class ProxyMiddleWare(object): def process_request(self, request, spider): proxy = random.choice(PROXIES) if proxy['user_passwd'] is None: # if 'user_passwd' not in proxy: # 没有代理账户验证的代理使用方式 print('---------------------->>> ', proxy['ip_port']) request.meta['proxy'] = "http://" + proxy['ip_port'] # request.meta['proxy'] = 'http://122.235.168.162:8118' else: # 对账户密码进行base64编码转换 base64_userpasswd = base64.b64encode(proxy['user_passwd'].encode()) # 对应到代理服务器的信令格式里 request.headers['Proxy-Authorization'] = 'Basic ' + base64_userpasswd.decode() request.meta['proxy'] = "http://" + proxy['ip_port'] ------------------------------------------------------------------------------------------------ setting里: PROXIES = [ # {'ip_port': '61.175.192.2:35420'}, # {'ip_port': '221.234.192.10:8010'}, {'ip_port': '221.224.49.194:51127', 'user_passwd': ''}, # {"ip_port": "121.41.8.23:16816", "user_passwd": "morganna_mode_g:ggc22qxp"}, # {'ip_port': '122.224.249.122:8088', 'user_passwd': 'user4:pass4'}, ] --------- DOWNLOADER_MIDDLEWARES = { # 'taobao.middlewares.TaobaoDownloaderMiddleware': 543, # 'taobao.middlewares.SeleniumMiddleware': 543, # 'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 751, 'taobao.middlewares.ProxyMiddleWare': 750, 'taobao.middlewares.RandomUserAgent': 400, } 我是这么设置的,而且这个IP用request测试过,返回状态码也是200,但在scrapy里不能正常抓取数据,请教各位大神指点下

scrapy爬某非空网站时,response响应值为200,body却是空的

如题,爬的网站为http://detail.zol.com.cn/index.php?c=SearchList&keyword=%C8%FD%D0%C7&page=1 parse方法中输出response.body 为 b''

python3 scrapy Request 请求时怎么保持headers 的参数首字母不大写

python3 scrapy Request 请求时,scrapy 会自动将headers 中的参数 格式化,使其保持首字母大写,下划线等特殊符号后第一个字母大写。但现在有个问题 我要往服务端传一个headers的参数,但参数本身没有大写,经过scrapy 请求后参数变为首字母大写,服务器端根本不认这个参数,我就想问下有谁知道scrapy,Request 有不处理headers的方法吗? 但使用requests请求时,而不是用scrapy.Request时,headers 是没有变化的。![he图片说明](https://img-ask.csdn.net/upload/201905/15/1557909540_468021.png) 这是headers 请求之前的 ![图片说明](https://img-ask.csdn.net/upload/201905/15/1557909657_878941.png) 这是抓包抓到的请求头

scrapy框架中调用目标解析函数方式:self.fun(response)调用方式和fun中的yield形成阻塞

![图片说明](https://img-ask.csdn.net/upload/202004/04/1585979773_480674.png)![图片说明](https://img-ask.csdn.net/upload/202004/04/1585979782_375014.png) # -*- coding: utf-8 -*- import scrapy from Lianjia.items import * import re import logging class LianjiaSpider(scrapy.Spider): name = 'lianjia' allowed_domains = ['lianjia.com'] #起始爬取地址,全国的城市页 start_urls = ['https://www.lianjia.com/city/'] def parse(self, response): if response.url in self.start_urls: try: #解析start_urls页的URL,得各城市地址 city_href_list = response.xpath('''//div[@class="city_list"]//li/a/@href''').extract() city_list = response.xpath('''//div[@class="city_list"]//li/a/text()''').extract() except IndexError as e: print('='*80, response.url, 'start_urls的xpath解析出错') for href, city in zip(city_href_list, city_list): #携带city下去,并将状态置为0表示为start_urls页面解析的地址发出的请求 meta = {'city': city, 'status': 0} # 将解析出的各城市地址发请求 yield scrapy.Request(href, meta=meta) # time.sleep(0.1) #解析各城市页面,得到二手房,新房等分支的URL elif response.meta.get('status') == 0: try: # 解析各城市页面的页签URL,以建立不同的分支 fr_texts = response.xpath('''//div[@class="nav typeUserInfo"]/ul/li/a/text()''').extract() fr_hrefs = response.xpath('''//div[@class="nav typeUserInfo"]/ul/li/a/@href''').extract() except IndexError as e: print('='*80, response.url, 'floor的xpath解析出错') meta = {'city': response.meta.get('city'), 'status': 1} for text, href in zip(fr_texts, fr_hrefs): meta['text'] = text # 不全部yield,避免发送不必要的请求,如有开启其他的分支,需在此处开启 fr_list = ['二手房', # '新房', ] #匹配地址以什么开头 # if href.startswith('https://.*?www.lianjia.com/erhshoufang'): if text in fr_list: yield scrapy.Request(href, meta=meta) #二手房分支 elif response.meta.get('text') == '二手房': try: # 获取本页面每页数据条数 s = len(response.xpath("""//*[@id="content"]/div[1]/ul/li/div[1]/div[1]/a/@href""").extract()) #获取本url总条数 sum_ = response.xpath("""//*[@id="content"]/div[1]/div[@class="resultDes clear"]/h2/span/text()""").extract()[0].strip() except IndexError as e: print('='*80, response.url, '每页条数或总条数值的xpath解析出错') sum_ = '' if sum_ != '': if int(sum_) > 0: # 计算本URL的页数 s_page = (int(sum_) + s - 1) // s # 如果不超过100,全交给parse_ErshoufangNextPage去翻页处理,否则看状态 if s_page <= 100: # self.parse_ErshoufangNextPage(response, s_page)#不能self.parse_ErshoufangNextPage调用,会和parse_ErshoufangNextPage的yield冲突,不管后面函数是否回调的当前函数 meta = {'s_page': s_page, 'city': response.meta.get('city')} yield scrapy.Request(response.url, meta=meta, callback=self.parse_ErshoufangNextPage, dont_filter=True )#由于该地址在之前已经发送过,所以需要dont_filter=True取消URL去重 elif s_page > 100: status = response.meta.get('status') meta = {'city': response.meta.get('city'), 'status': status, 'text': response.meta.get('text')} download_slot = response.meta.get('download_slot') if status == 1: #解析city页面,缩小过滤范围,得到区的链接,并发送请求 try: region_href_list = response.xpath('''//div[@class="position"]/dl[2]/dd/div[1]/div[1]/a/@href''').extract() except IndexError as e: print('='*80, response.url, 'if_status1的xpath解析出错') for href in region_href_list: url = 'https://' + download_slot + href meta['status'] = 2 yield scrapy.Request(url, meta=meta) # return elif status == 2: # 解析区页面,得到县的链接,并发送请求 try: country_href_list = response.xpath('//div[@class="position"]/dl[2]/dd/div/div[2]/a/@href').extract() except IndexError as e: print('='*80, response.url, 'if_status2的xpath解析出错') for href in country_href_list: url = 'https://' + download_slot + href meta['status'] = 3 yield scrapy.Request(url, meta=meta) # return elif status == 3: # 解析县页面,得到楼层过滤条件地址并发请求 #..表示选取当前节点的父节点 //div/dl/h2/dt[text()='楼层']/../../dd/a #a[contains(@href,'NameOnly')]表示选取href中包含NameOnly的a元素 try: lcs = response.xpath('''//div/dl/h2/dt[text()='楼层']/../../dd/a/@href''').extract() except IndexError as e: print('='*80, response.url, 'if_status3的xpath解析出错') for lc in lcs: p = re.compile('lc[0-9]/') lc = p.findall(lc) url = response.url + lc meta['status'] = 4 yield scrapy.Request(url, meta=meta) # return elif status == 4: #解析楼层页面, 得到价格过滤条件地址并发请求 try: ps = response.xpath('''//div/div[2]/dl[1]/h2/dt[text()='售价']/../../dd/a/@href''').extract() except IndexError as e: print('=' * 80, response.url, 'if_status4的xpath解析出错') for p in ps: meta['status'] = 5 url = 'https://' + download_slot + p yield scrapy.Request(url, meta=meta) elif status == 5: with open('gt100.txt', 'a', newline='\n', encoding='utf-8') as f: f.write(response.url) else: print('if_status溢出'*10, response.url, response.meta, 'if_status溢出'*10) else: print('if_s_page溢出'*10, response.url, response.meta, 'if_s_page溢出'*10) else: pass # print('找到总数量sum_为0套,地址:', response.url) else: print('if_sum_溢出'*10, response.url, response.meta, 'if_sum_溢出'*10) else: print('if分支溢出'*10, response.url, response.meta, 'if分支溢出'*10) #新房分支 # elif response.meta.get('text') == '新房': # # 本分支需修改 # # item为LianjiaXinfangItem # # 最终的解析页面需重设 # try: # sum_ = response.xpath("""//*[@id="content"]/div[1]/div[@class="resultDes clear"]/h2/span/text()""").extract()[0].strip() # except IndexError as e: # logging.warning(e) # sum_ = '' # if sum_ != '': # if int(sum_) > 0: # try: # # 获取本页面每页数据条数 # s = len(response.xpath("""//*[@id="content"]/div[1]/ul/li/div[1]/div[1]/a/@href""").extract()) # except IndexError as e: # logging.warning(e) # # 计算本URL的页数 # s_page = (int(sum_) + s - 1) // s # status = response.meta.get('status') # # 如果不超过100,全交给parse_NextPage去翻页处理,否则看状态 # if s_page <= 100: # self.parse_NextPage(response) # elif s_page > 100: # meta = {'city': response.meta.get('city'), # 'status': response.meta.get('status')} # if status == 1: # yield scrapy.Request(response.url, meta=meta, # callback=self.pase_City) # 该种再次发送请求的方式逻辑上导致请求次数剧增,增加了爬取时间,但是这种方式同样会导致阻塞 # # self.pase_City(response)#该种调用方式由于造成循环调用,导致队列阻塞 # elif status == 2: # yield scrapy.Request(response.url, meta=meta, callback=self.pase_Region) # # self.pase_Region(response) # elif status == 3: # yield scrapy.Request(response.url, meta=meta, callback=self.parse_County) # # self.parse_County(response) # elif status == 4: # with open('gt100.txt', 'a', newline='\n', encoding='utf-8') as f: # f.write(response.url) #二手房分支解析 # 解析页面,实现二手房分支的翻页,将翻页后的页面交给parse_ErshoufangEntry处理 def parse_ErshoufangNextPage(self, response): meta = {'city': response.meta.get('city')} s_page = response.meta.get('s_page') for page in range(1, s_page+1): url = response.url+'pg'+str(page) yield scrapy.Request(url, meta=meta, callback=self.parse_ErshoufangEntry) #解析二手房的详情链接 def parse_ErshoufangEntry(self, response): meta = {'city': response.meta.get('city')} details_href_list = response.xpath("""//*[@id="content"]/div[1]/ul/li/div[1]/div[1]/a/@href""").extract() for href in details_href_list: yield scrapy.Request(href, meta=meta, callback=self.parseErshoufangHTML) #解析每一套房的详情页,并yield item def parseErshoufangHTML(self, response): item = LianjiaErshoufangItem() item['city'] = response.meta.get('city') #item['img_src'] = response.xpath('''//*[@id="topImg"]//div[@class="imgContainer"]/img/@src''').extract_first() item['img_src'] = 'https://image1.ljcdn.com/110000-inspection/426839aeebee1c89ae14893cc19a1777-024.jpg.710x400.jpg' item['region'] = response.xpath('''//div[@class="areaName"]/span[2]/a[1]/text()''').extract_first() item['country'] = response.xpath('''//div[@class="areaName"]/span[2]/a[2]/text()''').extract_first() item['title'] = response.xpath('''//div[@class='content']/div[@class='title']/h1/text()''').extract_first() #price单价单位:元/平方米 item['price'] = response.xpath('''//div[@class='overview']/div[@class="content"]//div[@class="price "]//*[@class="unitPriceValue"]/text()''').extract_first() #totalPrice总价单位:万元 item['totalPrice'] = response.xpath('''//div[@class='overview']/div[@class="content"]//div[@class="price "]/span/text()''').extract_first() item['yrb'] = response.xpath('''//div[@class='area']/div[@class='subInfo']/text()''').extract_first() #基本属性 base_xpath = response.xpath('''//*[@id="introduction"]/div/div/div[1]/div[2]/ul''') item['layout'] = base_xpath.xpath('''./li[1]/text()''').extract_first() item['floor'] = base_xpath.xpath('''./li[2]/text()''').extract_first() item['acreage'] = base_xpath.xpath('''./li[3]/text()''').extract_first() item['structureLayout'] = base_xpath.xpath('''./li[4]/text()''').extract_first() item['inAcreage'] = base_xpath.xpath('''./li[5]/text()''').extract_first() item['architectureType'] = base_xpath.xpath('''./li[6]/text()''').extract_first() item['orientation'] = base_xpath.xpath('''./li[7]/text()''').extract_first() item['buildingStructure'] = base_xpath.xpath('''./li[8]/text()''').extract_first() item['decorationSituation'] = base_xpath.xpath('''./li[9]/text()''').extract_first() item['thRatio'] = base_xpath.xpath('''./li[10]/text()''').extract_first() item['elevator'] = base_xpath.xpath('''./li[11]/text()''').extract_first() item['propertyRightYears'] = base_xpath.xpath('''./li[12]/text()''').extract_first() #交易属性 business_xpath = response.xpath("""//*[@id="introduction"]/div/div/div[2]/div[2]/ul""") item['listingTime'] = business_xpath.xpath("""./li[1]/span[2]/text()""").extract_first() item['tradingRight'] = business_xpath.xpath("""./li[2]/span[2]/text()""").extract_first() item['lastTransaction'] = business_xpath.xpath("""./li[3]/span[2]/text()""").extract_first() item['housingUse'] = business_xpath.xpath("""./li[4]/span[2]/text()""").extract_first() item['housingLife'] = business_xpath.xpath("""./li[5]/span[2]/text()""").extract_first() item['propertyOwnership'] = business_xpath.xpath("""./li[6]/span[2]/text()""").extract_first() item['mortgageInformation'] = business_xpath.xpath("""./li[7]/span[2]/@title""").extract_first() item['housingSpareParts'] = business_xpath.xpath("""./li[8]/span[2]/text()""").extract_first() # item['housingSocietyEncoding'] = business_xpath.xpath("""./li[9]/span[2]/text()""").extract_first() yield(item) ``` ``` ``` ``` ``` ``` ``` ```

Scrapy yield Request 失效问题

想爬一下 游戏信息和评论 评论,信息是分开的 所以用了两个方法 parse中 用yield 进入第二个方法 和回调自己 都没问题 parse two 中 用yield 回调就不行 但是也不报错 就是没有进行 ``` def parse(self, response): #print response.body selector = scrapy.Selector(response) games = selector.xpath('//div[@class="app-item-caption"]/a[@class="item-caption-title flex-text-overflow"]/@href').extract() for game in games: game = game + '/review' yield scrapy.http.Request(game, callback=self.parse_two) # print game #游戏列表下一页 nextPage = selector.xpath('//ul[@class="pagination"]/li[last()]/a/@href').extract() if nextPage: next = nextPage[0] # print next yield scrapy.http.Request(next, callback=self.parse) def parse_two(self,response): Gid = response.url[27:32] Gid = int(Gid) selector = scrapy.Selector(response) game_review_times = selector.xpath('//a[@class="text-header-time"]/span/@data-dynamic-time').extract() game_reviews = selector.xpath('//div[@class="review-item-text"]/div[@class="item-text-body"]').extract() game_reivew_author = selector.xpath('//span[@class="taptap-user"]/a/text()').extract() reviewNo = 1 review_dict = {} # 处理评论 for review in game_reviews: # 计算每天评论量 # time_day = time.strftime('%Y-%m-%d',time.localtime(int(game_review_times[reviewNo - 1]))) # if review_dict.get(time_day): # review_dict[time_day] += 1 # else: # review_dict[time_day] = 1 review_lines = re.findall('<p>(.*?)</p>',review,re.S) review = '' for line in review_lines: review += line item = TaptapItem() item['Review_GID'] = Gid item['Review_content'] = review item['Review_Author'] = game_reivew_author[reviewNo-1] item['Reivew_Time'] = game_review_times[reviewNo-1] yield item print '评论%d:'%reviewNo print game_review_times[reviewNo-1] print review reviewNo += 1 #评论下一页 nextPage = selector.xpath('//ul[@class="pagination"]/li[last()]/a/@href').extract() if nextPage: next = nextPage[0] # print next yield scrapy.http.Request(next, callback=self.parse_two) ```

请问scrapy爬虫使用代理的问题

我用scrapy爬虫来抓取数据,购买了一些代理,看scrapy文档上面介绍使用代理的话要编写Middleware,但是我不打算使用Middleware,我尝试了这样 ``` def start_requests(self): name = my_name password = password proxy = my proxy return[ FormRequest(url,formate={'account':my_name,'password':password}, meta={'proxy':proxy}, callback=self.after_login) ] def after_login(self, response): response.xpath ``` 但是返回了错误,请问各位老师如何不使用middleware然后可以使用代理?谢谢

Scrapy多级页面爬取,程序运行顺序问题

``` # -*- coding: utf-8 -*- import scrapy from SYDW.items import SydwItem class DanweiCrawlingSpider(scrapy.Spider): # 继承自Spider类 name = 'danwei_crawling' allowed_domains = ['chinasydw.org']#允许域名 start_urls = ['http://www.chinasydw.org'] base_domain = 'http://www.chinasydw.org' def parse(self, response): province = response.xpath("//div[@class='fenzhan']//a/@href") for each_p in province: yield scrapy.Request(each_p.get(),callback=self.get_page) def get_page(self,response): for each in response.xpath("//div[@class='body']/ul[@class = 'list11 clearfix']/li[not(@class='ivl')]"): item = SydwItem() name = response.xpath("//div[@class='body']/ul[@class = 'list11 clearfix']/li[not(@class='ivl')]/a[not(@style)]/text()").get() time = response.xpath("//div[@class='body']/ul[@class = 'list11 clearfix']/li[not(@class='ivl')]/span[@class='time']/text()").get() link = response.xpath("//div[@class='body']/ul[@class = 'list11 clearfix']/li[not(@class='ivl')]/a[not(@style)]/@href").get() item['name']=name item['time']=time item['link']=link yield item next_url = response.xpath("//div[@class='pageset']/a[last()]/@href").get() yield scrapy.Request(self.base_domain+next_url,callback=self.get_page,meta={'item':item}) ``` 思路: parse函数获取分站信息 然后进入分站,获取分站每一页信息。 问题: 爬取顺序问题: 按设想应该是进入分站——爬取完多个页面——进入下一个分站——爬取完多个页面;实际上运行结果是进入分站——爬取完当前页面——进入下一个分站——爬取完当前页面,直到所有分站遍历完后再开始进入分站的下一页。 初学scrapy,希望得到大家的帮助。

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

Only老K说-爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

2020_五一数学建模_C题_整理后的数据.zip

该数据是我的程序读取的数据,仅供参考,问题的解决方案:https://blog.csdn.net/qq_41228463/article/details/105993051

R语言入门基础

本课程旨在帮助学习者快速入门R语言: 课程系统详细地介绍了使用R语言进行数据处理的基本思路和方法。 课程能够帮助初学者快速入门数据处理。 课程通过大量的案例详细地介绍了如何使用R语言进行数据分析和处理 课程操作实际案例教学,通过编写代码演示R语言的基本使用方法和技巧

人才招聘系统PHP+MySQL源码

PHP 5.0及以上 + MySQL 5.0及以上 开发的人才招聘系统完全可运行源码,按照操作说明简单配置即可运行。学习PHPWEB应用的完整系统程序源码。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

python可视化分析(matplotlib、seaborn、ggplot2)

python可视化分析总结(matplotlib、seaborn、ggplot)一、matplotlib库1、基本绘图命令3、图形参数设置4、特殊统计图的绘制4.1 数学函数图4.2 气泡图4.1 三维曲面图二、seaborn库1、常用统计图1.1 箱线图1.2 小提琴图1.3 点图1.4 条图与计数图1.5 分组图1.6 概率分布图2、联合图3、配对图三、ggplot库1、图层画法+常用图形2、快速绘图 一、matplotlib库 1、基本绘图命令 import matplotlib.pyplot as

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置及使用

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

【大总结2】大学两年,写了这篇几十万字的干货总结

本文十天后设置为粉丝可见,喜欢的提前关注 不要白嫖请点赞 不要白嫖请点赞 不要白嫖请点赞 文中提到的书我都有电子版,可以评论邮箱发给你。 文中提到的书我都有电子版,可以评论邮箱发给你。 文中提到的书我都有电子版,可以评论邮箱发给你。 本篇文章应该算是Java后端开发技术栈的,但是大部分是基础知识,所以我觉得对任何方向都是有用的。 1、数据结构 数据结构是计算机存储、...

lena全身原图(非256*256版本,而是全身原图)

lena全身原图(非256*256版本,而是全身原图) lena原图很有意思,我们通常所用的256*256图片是在lena原图上截取了头部部分的256*256正方形得到的. 原图是花花公子杂志上的一个

【项目实战】 图书信息管理系统(Maven,mybatis)(第一个自己独立完成的项目)

《程序设计综合训练实践报告》 此项目为图书信息管理系统,是一个采用了mysql+mybatis框架+java编写的maven项目

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

Python入门视频精讲

Python入门视频培训课程以通俗易懂的方式讲解Python核心技术,Python基础,Python入门。适合初学者的教程,让你少走弯路! 课程内容包括:1.Python简介和安装 、2.第一个Python程序、PyCharm的使用 、3.Python基础、4.函数、5.高级特性、6.面向对象、7.模块、8.异常处理和IO操作、9.访问数据库MySQL。教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

20行代码教你用python给证件照换底色

20行代码教你用python给证件照换底色

2018年全国大学生计算机技能应用大赛决赛 大题

2018年全国大学生计算机技能应用大赛决赛大题,程序填空和程序设计(侵删)

MySQL数据库从入门到实战应用

限时福利1:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利2:购课后添加学习助手(微信号:csdn590),按消息提示即可领取编程大礼包! 为什么说每一个程序员都应该学习MySQL? 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能! 【课程设计】 在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。 本课程包含3大模块:&nbsp; 一、基础篇: 主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。 二、SQL语言篇: 本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,学会熟练对库表进行增删改查等必备技能。 三、MySQL进阶篇: 本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。 &nbsp;

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

Eclipse archetype-catalog.xml

Eclipse Maven 创建Web 项目报错 Could not resolve archetype org.apache.maven.archetypes:maven-archetype-web

使用TensorFlow+keras快速构建图像分类模型

课程分为两条主线: 1&nbsp;从Tensorflow的基础知识开始,全面介绍Tensorflow和Keras相关内容。通过大量实战,掌握Tensorflow和Keras经常用到的各种建模方式,参数优化方法,自定义参数和模型的手段,以及对训练结果评估与分析的技巧。 2&nbsp;从机器学习基础算法开始,然后进入到图像分类领域,使用MNIST手写数据集和CIFAR10图像数据集,从简单神经网络到深度神经网络,再到卷积神经网络,最终完成复杂模型:残差网络的搭建。完成这条主线,学员将可以自如地使用机器学习的手段来达到图像分类的目的。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

最近面试Java后端开发的感受:如果就以平时项目经验来面试,通过估计很难,不信你来看看

在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间。我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面的。 我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断。 但现实情况是,大多数人可能面试前没准备,或准备方法不得当。要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类面试必问

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

相关热词 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园 c# 设置当前标注样式
立即提问