如何通过xpath定位到span标签里的title

图片说明
图片说明

2个回答

bs4还是scrapy??

qq_43656607
天不绝我 刚发现你用的是Xpath,不好意思,我不会xpath
5 个月之前 回复
qq_43656607
天不绝我 soup = Beautifulsoup(html,"lxml")
5 个月之前 回复
qq_43656607
天不绝我 bs4的用法
5 个月之前 回复
qq_36327266
qq_36327266 回复天不绝我: 这个是什么语句啊
5 个月之前 回复
qq_43656607
天不绝我 soup.find(class_="info").find(class_="title").find("span").get("title"),,,,,试试
5 个月之前 回复
qq_36327266
qq_36327266 回复天不绝我: 这样能看到了吗 第一次问问题
5 个月之前 回复
qq_43656607
天不绝我 编辑一下你的问题,把你要定位的东西,截图
5 个月之前 回复
qq_36327266
qq_36327266 是lxml
5 个月之前 回复

只要定位到这个 span 就可以了,然后获取这个元素的 title 属性值。
看下 class="info"是不是唯一的,如果是的话利用这个找到这个 class 的 div 的孩子 span 。

qq_36327266
qq_36327266 找到span如何定位里面的title啊
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Xpath路径定位问题定位不到
``` <div class="p-shop" data-score="4" data-reputation="0" data-shopid="" data-done="1"><span><a href="//mall.jd.com/index-1000000182.html" target="_blank" title="华硕电脑京东官方旗舰店">华硕电脑京东官方旗...</a><em class="im-02" title="联系供应商进行咨询" data-shopid="1000000182" venderid="1000000182"></em></span></div> xpath定位 ./div/div[@class="p-shop"]/span/a/@title 得到的是url 如果想要url 的title属性也就是 title="华硕电脑京东官方旗舰店" 这个怎么定位 一直抓出来的都是url 不是字符串 ``` xpath定位 ./div/div[@class="p-shop"]/span/a/@title 得到的是url 如果想要url 的title属性也就是 title="华硕电脑京东官方旗舰店" 这个怎么定位 一直抓出来的都是url 不是字符串
用selenium 的 xpath定位元素,为什么没报错但却没有去点击呢?
def setUp(self): self.url = "https://m.baidu.com/sf?top=%7B%22sfhs%22%3A1%7D&anchor=0811&pd=pl&word=%E8%87%AA%E7%94%B1%E4%BE%A0" options = webdriver.ChromeOptions() mobileEmulation = {'deviceName': 'Galaxy Note 3'} options.add_experimental_option('mobileEmulation', mobileEmulation) self.driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=options) self.driver.implicitly_wait(10) #最多等待10秒,隐性等待对整个driver的周期都起作用,所以一次启动只要设置一次即可 self.driver.get(self.url) self.assertTrue(ec.title_is(u"自由侠")) self.assertTrue(ec.visibility_of_element_located(u"自由侠")) def tearDown(self): self.driver.quit() def testCase1(self): locator = self.driver.find_element_by_xpath('//span[contains(text(), "7寸液晶仪表")]') locator.click()
requests+xpath爬虫关于url翻页问题
``` from lxml import etree import requests import xlwt import xlrd class qunawang(object): def __init__(self): self.f = xlwt.Workbook() # 创建工作薄 self.sheet1 = self.f.add_sheet(u'景点信息', cell_overwrite_ok=True) # 命名table self.rowsTitle = [u'编号',u'景点名', u'景点介绍', u'景点价格', u'景点地址', u'景点网址'] # 创建标题 for i in range(0, len(self.rowsTitle)): # 最后一个参数设置样式 self.sheet1.write(0, i, self.rowsTitle[i], self.set_style('Times new Roman', 220, True)) # Excel保存位置 self.f.save('F:/information/viewspot.xlsx') def set_style(self, name, height, bold=False): style = xlwt.XFStyle() # 初始化样式 font = xlwt.Font() # 为样式创建字体 font.name = name font.bold = bold font.colour_index = 2 font.height = height style.font = font return style def getUrl(self): #加入自动换Url功能 url = ('http://piao.qunar.com/ticket/list.htm?keyword=%E5%8D%97%E4%BA%AC&region=&from=mpl_search_suggest&page=2') self.spiderPage(url) def spiderPage(self,url): if url is None: return None try: data=xlrd.open_workbook('F:/information/viewspot.xlsx') table=data.sheets()[0] rowCount=table.nrows#获取行数 user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36' headers={'User-Agent':user_agent} respon=requests.get(url,headers=headers) htmltext=respon.text s = etree.HTML(htmltext) trs = s.xpath('//*[@id="search-list"]/div') m=0 for tr in trs: data=[] title = tr.xpath('./div/div[2]/h3/a/text()') location = tr.xpath('./div/div[2]/div/p/span/text()') introduce = tr.xpath('./div/div[2]/div/div[2]/text()') price = tr.xpath('./div/div[3]/table/tr[1]/td/span/em/text()') website = tr.xpath('./div/div[2]/h3/a/@href') title=title[0] if title else '' location=location[0] if location else '' introduce=introduce[0] if introduce else '' price=price[0] if price else '' website=website[0] if website else '' data.append(rowCount+m) data.append(title) data.append(introduce) data.append(price) data.append(location) data.append(website) for i in range(len(data)): self.sheet1.write(rowCount+m,i,data[i]) m+=1 print(m) print(title, introduce, price, location, website) finally: self.f.save('F:/information/viewspot.xlsx') if '_main_': qn=qunawang() qn.getUrl() ``` 刚刚接触爬虫,参考了网上的一些代码,爬取的是去哪网南京的景点,我想加入可以翻页的功能,该如何添加
用scrapy爬取谷歌应用市场
我在用scrapy框架爬谷歌应用市场,但是只爬了不到10000个app,有大神解答一下这是为什么吗?应该不是被ban的原因,因为我设置了ua池和代理IP。 具体代码如下: ``` # -*- coding: utf-8 -*- import scrapy # from scrapy.spiders import CrawlSpider, Rule # from scrapy.linkextractors import LinkExtractor # from html.parser import HTMLParser as SGMLParser from scrapy import Request from urllib.parse import urljoin from gp.items import GpItem class GoogleSpider(scrapy.Spider): # print("HELLO STARTING") name = 'google' allowed_domains = ['play.google.com'] start_urls = ['https://play.google.com/store/apps/'] ''' rules = [ Rule(LinkExtractor(allow=("https://play\.google\.com/store/apps/details",)), callback='parse_app', follow=True), ] ''' def parse(self, response): print("Calling Parse") selector = scrapy.Selector(response) urls = selector.xpath('//div[@class="LNKfBf"]/ul/li[@class="CRHL7b eZdLre"]/ul[@class="TEOqAc"]/li[@class="KZnDLd"]/a[@class="r2Osbf"]/@href').extract() print(urls) link_flag = 0 links = [] for link in urls: links.append(link) for each in urls: yield Request(url="http://play.google.com" + links[link_flag], callback=self.parse_more, dont_filter=True) print("http://playgoogle.com" + links[link_flag]) link_flag += 1 def parse_more(self, response): selector = scrapy.Selector(response) # print(response.body) urls = selector.xpath('//a[@class="LkLjZd ScJHi U8Ww7d xjAeve nMZKrb id-track-click "]/@href').extract() link_flag = 0 links = [] for link in urls: # print("LINK" + str(link)) links.append(link) for each in urls: yield Request(url="http://play.google.com" + links[link_flag], callback=self.parse_next, dont_filter=True) # print("http://play.google.com" + links[link_flag]) link_flag += 1 def parse_next(self, response): selector = scrapy.Selector(response) # print(response) # app_urls = selector.xpath('//div[@class="details"]/a[@class="title"]/@href').extract() app_urls = selector.xpath('//div[@class="Vpfmgd"]/div[@class="RZEgze"]/div[@class="vU6FJ p63iDd"]/' 'a[@class="JC71ub"]/@href').extract() urls = [] for url in app_urls: url = "http://play.google.com" + url print(url) urls.append(url) link_flag = 0 for each in app_urls: yield Request(url=urls[link_flag], callback=self.parse_app, dont_filter=True) link_flag += 1 def parse_app(self, response): item = GpItem() item['app_url'] = response.url item['app_name'] = response.xpath('//h1[@itemprop="name"]/span').xpath('text()').get() item['app_icon'] = response.xpath('//img[@itemprop="image"]/@src').get() item['app_rate'] = response.xpath('//div[@class="K9wGie"]/div[@class="BHMmbe"]').xpath('text()').get() item['app_version'] = response.xpath('//div[@class="IQ1z0d"]/span[@class="htlgb"]').xpath('text()').get() item['app_description'] = response.xpath('//div[@itemprop="description"]/span/div').xpath('text()').get() # item['app_developer'] = response.xpath('//') # print(response.text) yield item ``` 另一个问题是我能不能通过定义关键词来爬取特定类型的app呀?如果可以的话那在scrapy中该怎么实现呢? 拜托各位大神帮我解答一下吧!
采用scrapy框架爬取二手房数据,显示没有爬取到页面和项目,不清楚问题原因
1.item ``` import scrapy class LianjiaItem(scrapy.Item): # define the fields for your item here like: # 房屋名称 name = scrapy.Field() # 房屋户型 type = scrapy.Field() # 建筑面积 area = scrapy.Field() # 房屋朝向 direction = scrapy.Field() # 装修情况 fitment = scrapy.Field() # 有无电梯 elevator = scrapy.Field() # 房屋总价 total_price = scrapy.Field() # 房屋单价 unit_price = scrapy.Field() # 房屋产权 property = scrapy.Field() ``` 2.settings ``` BOT_NAME = 'lianjia' SPIDER_MODULES = ['lianjia.spiders'] NEWSPIDER_MODULE = 'lianjia.spiders' USER_AGENT = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" ROBOTSTXT_OBEY = False ITEM_PIPELINES = { 'lianjia.pipelines.FilterPipeline': 100, 'lianjia.pipelines.CSVPipeline': 200, } ``` 3.pipelines ``` import re from scrapy.exceptions import DropItem class FilterPipeline(object): def process_item(self,item,spider): item['area'] = re.findall(r"\d+\.?\d*",item["area"])[0] if item["direction"] == '暂无数据': raise DropItem("房屋朝向无数据,抛弃此项目:%s"%item) return item class CSVPipeline(object): index = 0 file = None def open_spider(self,spider): self.file = open("home.csv","a") def process_item(self, item, spider): if self.index == 0: column_name = "name,type,area,direction,fitment,elevator,total_price,unit_price,property\n" self.file.write(column_name) self.index = 1 home_str = item['name']+","+item['type']+","+item['area']+","+item['direction']+","+item['fitment']+","+item['elevator']+","+item['total_price']+","+item['unit_price']+","+item['property']+"\n" self.file.write(home_str) return item def close_spider(self,spider): self.file.close() ``` 4.lianjia_spider ``` import scrapy from scrapy import Request from lianjia.items import LianjiaItem class LianjiaSpiderSpider(scrapy.Spider): name = 'lianjia_spider' # 获取初始请求 def start_requests(self): # 生成请求对象 url = 'https://bj.lianjia.com/ershoufang/' yield Request(url) # 实现主页面解析函数 def parse(self, response): # 使用xpath定位到二手房信息的div元素,保存到列表中 list_selector = response.xpath("//li/div[@class = 'info clear']") # 依次遍历每个选择器,获取二手房的名称,户型,面积,朝向等信息 for one_selector in list_selector: try: name = one_selector.xpath("div[@class = 'title']/a/text()").extract_first() other = one_selector.xpath("div[@class = 'address']/div[@class = 'houseInfo']/text()").extract_first() other_list = other.split("|") type = other_list[0].strip(" ") area = other_list[1].strip(" ") direction = other_list[2].strip(" ") fitment = other_list[3].strip(" ") total_price = one_selector.xpath("//div[@class = 'totalPrice']/span/text()").extract_first() unit_price = one_selector.xpath("//div[@class = 'unitPrice']/@data-price").extract_first() url = one_selector.xpath("div[@class = 'title']/a/@href").extract_first() yield Request(url,meta={"name":name,"type":type,"area":area,"direction":direction,"fitment":fitment,"total_price":total_price,"unit_price":unit_price},callback=self.otherinformation) except: pass current_page = response.xpath("//div[@class = 'page-box house-lst-page-box']/@page-data").extract_first().split(',')[1].split(':')[1] current_page = current_page.replace("}", "") current_page = int(current_page) if current_page < 100: current_page += 1 next_url = "https://bj.lianjia.com/ershoufang/pg%d/" %(current_page) yield Request(next_url,callback=self.otherinformation) def otherinformation(self,response): elevator = response.xpath("//div[@class = 'base']/div[@class = 'content']/ul/li[12]/text()").extract_first() property = response.xpath("//div[@class = 'transaction']/div[@class = 'content']/ul/li[5]/span[2]/text()").extract_first() item = LianjiaItem() item["name"] = response.meta['name'] item["type"] = response.meta['type'] item["area"] = response.meta['area'] item["direction"] = response.meta['direction'] item["fitment"] = response.meta['fitment'] item["total_price"] = response.meta['total_price'] item["unit_price"] = response.meta['unit_price'] item["property"] = property item["elevator"] = elevator yield item ``` 提示错误: ``` de - interpreting them as being unequal if item["direction"] == '鏆傛棤鏁版嵁': 2019-11-25 10:53:35 [scrapy.core.scraper] ERROR: Error processing {'area': u'75.6', 'direction': u'\u897f\u5357', 'elevator': u'\u6709', 'fitment': u'\u7b80\u88c5', 'name': u'\u6b64\u6237\u578b\u517113\u5957 \u89c6\u91ce\u91c7\u5149\u597d \u65e0\u786c\u4f24 \u4e1a\u4e3b\u8bda\u610f\u51fa\u552e', 'property': u'\u6ee1\u4e94\u5e74', 'total_price': None, 'type': u'2\u5ba41\u5385', 'unit_price': None} Traceback (most recent call last): File "f:\python_3.6\venv\lib\site-packages\twisted\internet\defer.py", line 654, in _runCallbacks current.result = callback(current.result, *args, **kw) File "F:\python_3.6\lianjia\lianjia\pipelines.py", line 25, in process_item home_str = item['name']+","+item['type']+","+item['area']+","+item['direction']+","+item['fitment']+","+item['elevator']+","+item['total_price']+","+item['unit_price']+ ","+item['property']+"\n" TypeError: coercing to Unicode: need string or buffer, NoneType found ```
关于jquery clone的问题
请问我下面代码执行后为什么不能达到预期效果。我希望克隆列表中的所有连接并把他们包装到一个div标签里。大家帮忙分析下,谢谢! jquery代码如下: $(function() { var copy = $('.myList li a').clone(); copy.wrap($('#myDiv')); }); html代码缩影: <div id="someDiv">This is a &lt;div&gt; with an id of <tt>someDiv</tt></div> <div id="myDiv" title="myTitle1"><span>Hello</span></div> <div title="myTitle2"><span>Goodbye</span></div> <ul class="myList"> <li><a href="http://jquery.com">jQuery supports</a> <ul> <li><a href="css1">CSS1</a></li> <li><a href="css2">CSS2</a></li> <li><a href="css3">CSS3</a></li> <li>Basic XPath</li> </ul> </li> <li>jQuery also supports <ul> <li>Custom selectors</li> <li>Form selectors</li> </ul> </li> </ul>
爬虫部分数据写入excel失败
最近学习爬虫,参考大佬代码,但是爬取结果没有抬头,第三个爬取的数据并没有插入excel中 ``` import requests from lxml import etree from openpyxl import Workbook import random class tengxun(): def __int__(self): self.url = 'https://ke.qq.com/course/list?mt=1001&page={}' self.header = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0", "Connection": "keep - alive", } self.wb = Workbook() self.ws = self.wb.active self.ws.append(['title', 'link', 'now_reader']) def geturl(self): self.url = 'https://ke.qq.com/course/list?mt=1001&page={}' url = [self.url.format(i) for i in range(1,5)] return url def prase_url(self,url): self.header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0", "Connection": "keep - alive", } response = requests.get(url, headers=self.header, timeout=5) return response.content.decode('gbk', 'ignore') def get_list(self,html_str): html = etree.HTML(html_str) connect_list = [] lists = html.xpath("//li[@class ='course-card-item']") for list in lists: item = {} item['title'] = ''.join(list.xpath("./h4/a[@class = 'item-tt-link']/text()")) item['link'] = ''.join(list.xpath("./a[@class = 'item-img-link']/@href")) item['now_reader'] = ''.join(list.xpath("./div[@class = 'item-line item-line--moddle']/span[@class='line-cell item-user']/text()")) connect_list.append(item) return connect_list def save_list(self, connects): self.wb = Workbook() self.ws = self.wb.active for connect in connects: self.ws.append([connect['title'], connect['link'], connect['now_reader']]) print('保存成功页招聘信息') def run(self): url_list = self.geturl() for url in url_list: html_url = self.prase_url(url) connects = self.get_list(html_url) self.save_list(connects) self.wb.save(r'C:\Users\Administrator\Desktop\resource\UA_ls\demo_09 try.xlsx') if __name__=='__main__': spider = tengxun() spider.run() ```
汽车之家口碑爬虫程序没报错,却没有输出数据
# -*-coding:utf-8-*- import requests from lxml import html import sys reload(sys) sys.setdefaultencoding( "utf-8" ) url = "https://k.autohome.com.cn" con = requests.get(url).content sel = html.fromstring(con) for i in sel.xpath('//li[@class="kb-list-item"]'): try: issue=i.xpath('/p[@class="item-title"]/text()')[0] info=i.xpath('/p[@class="item-intr"][1]/text()')[0] comment=i.xpath('/div[@class="item-info"]/span[@class="message"]/text()')[0] agree=i.xpath('/div[@class="item-info"]/span[@class="like"]/text()')[0] poster=i.xpath('/div[@class="item-info"]/span[@class="nick-name"]/text()')[0] except IndexError: print "indexerror" print issue,info,comment,agree,poster with open("autohome.txt","a") as f: f.write("%s\n%s\n%s\n %s\n%s\n" % (issue,info,comment,agree,poster)) f.write("==========================\n") 程序没有报错,却什么都没有输出,一个数据都没有?这该怎么解决?
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重定向,要抓取的是百度所有词条,但是总会发生重定向导致无法获得想要的网页
python 新手 提问,求教,多谢!
#-*_coding:utf8-*- import requests import re import sys from lxml import etree reload(sys) sys.setdefaultencoding("utf-8") url = 'https://movie.douban.com/people/li2007/collect?start=0&sort=time&rating=all&tag=.%E7%94%B5%E5%BD%B1&mode=grid&filter=all' j = 0 all_links = [] for i in range(2): link = re.sub('start=\d', 'start=%d' % j, url, re.S) all_links.append(link) j += 15 all_htmls = [] for i in range(2): html = requests.get(all_links[i]).text all_htmls.append(html) all_items = [] for i in range(2): selector = etree.HTML(all_htmls[i]) item_group = selector.xpath('//div[@class="grid-view"]/div[@class="item"]/div[@class="info"]/ul/li[@class="title"]/a/@href') for j in range(len(item_group)): all_items.append(item_group[j]) all_infos = [] for i in range(len(all_items)): info = {} titlelink = all_items[i] titlehtml = requests.get(titlelink).text selector = etree.HTML(titlehtml) info['title'] = selector.xpath('//span[@property="v:itemreviewed"]/text()') info['date'] = selector.xpath('//span[@class="year"]/text()') info['rating'] = selector.xpath('//strong[@class="ll rating_num"]/text()') all_infos.append(info) f = open('info.txt', 'a') j = 1 for each in all_infos: f.writelines('No.:' + str(j) + '\n') f.writelines('Title:' + each['title'] + '\n') f.writelines('Date:' + each['date'] + '\n') f.writelines('Rating:' + each['rating'] + '\n\n') j += 1 f.close() print j 这段代码运行后会报错,错误在 f.writelines('Title:' + each['title'] + '\n') f.writelines('Date:' + each['date'] + '\n') f.writelines('Rating:' + each['rating'] + '\n\n') 这几行,提示: Traceback (most recent call last): File "D:/D/PycharmProjects/untitled/456.py", line 46, in <module> f.writelines('Title:' + each['title'] + '\n') TypeError: cannot concatenate 'str' and 'list' objects 百思不得其解,新手,正在试着自学入门python,请留情,请指教,多谢多谢! 另外: 我如果改成 str( each['title']) str( each['date']) str( each['rating']) 的话,程序可以运行,但是结果会是这样子: No.:1 Title:[u'\u5144\u5f1f Br\xf8dre'] Date:['(2015)'] Rating:['8.9'] No.:2 Title:[u'\u6c42\u804c\u8bb0 Get a Job'] Date:['(2016)'] Rating:[] No.:3 Title:[u'\u5931\u5e38 Anomalisa'] Date:['(2015)'] Rating:['7.4'] No.:4 Title:[u'\u8759\u8760\u4fa0\u5927\u6218\u8d85\u4eba\uff1a\u6b63\u4e49\u9ece\u660e Batman v Superman: Dawn of Justice'] Date:['(2016)'] Rating:['6.7'] No.:5 Title:[u'\u7231\u60c5\u91cd\u51fb Love Punch'] Date:['(2013)'] Rating:['6.4'] No.:6 Title:[u'\u98de\u8dc3\u60c5\u6d77 Beyond the Sea'] Date:['(2004)'] Rating:['7.6'] No.:7 Title:[u"\u8ff7\u59311971 '71"] Date:['(2014)'] Rating:['7.1'] No.:8 Title:[u'\u6b7b\u4f8d Deadpool'] Date:['(2016)'] Rating:['7.6'] No.:9 Title:[u'\u7b2c\u4e94\u6ce2 The 5th Wave'] Date:['(2016)'] 等等.... 可我想要的结果是 No.:1 Title:Brødre Date:(2015) Rating:8.9 为什么呢?
scrapy爬取小说,从详情页获取了书名等信息再爬小说正文,如何做到所有章节被放在一个list里面?
我想要这样的形式: {"book_name": "XXXX", "writer": "XXX", "type": "XXX", "total_click": "XXX", "book_intro": "XXX", "label": ["XX", "XX", "XX", "XX"], "total_word_number": "XX ", "total_introduce": "XX", "week_introduce": "XX", "read_href": "XX", "chapters": [{"name": "第0001章 XX", "word_count": "XX", "time": "XX", "text": "XXXX"},{"name": "第0002章 XX", "word_count": "XX", "time": "XX", "text": "XXXX"},……]} 就像这样 ![图片说明](https://img-ask.csdn.net/upload/201906/12/1560341795_56596.jpg) 但是现在的结果不是章节在一个dict里面而是每章都返回一次item,我知道是哪里的逻辑有问题,但是不会改 代码如下 ``` # -*- coding: utf-8 -*- import scrapy from novel.items import NovelItem from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor import re url_page=1 class NovelSpider(CrawlSpider): name = 'novel' allowed_domains = ['book.zongheng.com'] custom_settings = { "USER_AGENT": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", } start_urls = [] # for i in range(1,2): i = 1 start_urls.append('http://book.zongheng.com/store/c0/c0/b0/u1/p' + str(i) +'/v9/s9/t0/u0/i1/ALL.html') rules = ( Rule(LinkExtractor(allow=r'book/\d+'), callback="parse_detail"), ) def parse_detail(self,response): item = NovelItem() item['book_name'] = response.css('div.book-name::text').extract_first() item['writer'] = response.css("div.au-name a::text").extract_first() item['type'] = response.css( "body > div.wrap > div.book-html-box.clearfix > div.book-top.clearfix > div.book-main.fl > div.book-detail.clearfix > div.book-info > div.book-label > a.label::text").extract_first() item['total_click'] = response.css( "body > div.wrap > div.book-html-box.clearfix > div.book-top.clearfix > div.book-main.fl > div.book-detail.clearfix > div.book-info > div.nums > span:nth-child(3) > i::text").extract_first() item['book_intro'] = response.css( "body > div.wrap > div.book-html-box.clearfix > div.book-top.clearfix > div.book-main.fl > div.book-detail.clearfix > div.book-info > div********.book-dec.Jbook-dec.hide > p::text").extract_first() item['label'] = response.xpath("//div[@class='book-label']/span/a/text()").extract() item['total_word_number'] = response.xpath("//div[@class='nums']/span[1]/i/text()").extract_first() item['total_introduce'] = response.xpath("//div[@class='nums']/span[2]/i/text()").extract_first() item['week_introduce'] = response.xpath("//div[@class='nums']/span[4]/i/text()").extract_first() read_href = response.css("div.btn-group>a::attr(href)").extract_first() if read_href: yield scrapy.Request( read_href, callback=self.parse_content, dont_filter=True, meta={"item": item}, ) def parse_content(self, response): # 处理正文 item = response.meta["item"] chapters = [] chapter_name = response.css("div.title_txtbox::text").extract_first() word_count = response.css("#readerFt > div > div.bookinfo > span:nth-child(2)::text").extract_first() time = response.css("#readerFt > div > div.bookinfo > span:nth-child(3)::text").extract_first() content_link = response.css("div.content") paragraphs = content_link.css("p::text").extract() content_text = "" for i in range(0,len(paragraphs)): content_text = content_text + paragraphs[i] + "\n" content = dict(name=chapter_name,word_count=word_count,time=time,text=content_text) chapters.append(content) item['chapters'] = chapters#应该是这里出了问题,但是我不知道怎么解决 global url_page url_page = url_page+1 next_page = response.css("a.nextchapter::attr(href)").extract_first() if url_page<21: yield scrapy.Request( next_page, callback=self.parse_content, dont_filter = True, meta = {"item": item}, ) # print(chapters) 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) ```
爬取亚马逊商品信息 显示错误
这里显示错误 ![图片说明](https://img-ask.csdn.net/upload/201704/23/1492937804_11317.jpg) ``` from lxml import html import csv,os,json import requests from exceptions import ValueError from time import sleep def AmzonParser(url): headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'} page = requests.get(url,headers=headers) while True: sleep(3) try: doc = html.fromstring(page.content) XPATH_NAME = '//h1[@id="title"]//text()' XPATH_SALE_PRICE = '//span[contains(@id,"ourprice") or contains(@id,"saleprice")]/text()' XPATH_ORIGINAL_PRICE = '//td[contains(text(),"List Price") or contains(text(),"M.R.P") or contains(text(),"Price")]/following-sibling::td/text()' XPATH_CATEGORY = '//a[@class="a-link-normal a-color-tertiary"]//text()' XPATH_AVAILABILITY = '//div[@id="availability"]//text()' RAW_NAME = doc.xpath(XPATH_NAME) RAW_SALE_PRICE = doc.xpath(XPATH_SALE_PRICE) RAW_CATEGORY = doc.xpath(XPATH_CATEGORY) RAW_ORIGINAL_PRICE = doc.xpath(XPATH_ORIGINAL_PRICE) RAw_AVAILABILITY = doc.xpath(XPATH_AVAILABILITY) NAME = ' '.join(''.join(RAW_NAME).split()) if RAW_NAME else None SALE_PRICE = ' '.join(''.join(RAW_SALE_PRICE).split()).strip() if RAW_SALE_PRICE else None CATEGORY = ' > '.join([i.strip() for i in RAW_CATEGORY]) if RAW_CATEGORY else None ORIGINAL_PRICE = ''.join(RAW_ORIGINAL_PRICE).strip() if RAW_ORIGINAL_PRICE else None AVAILABILITY = ''.join(RAw_AVAILABILITY).strip() if RAw_AVAILABILITY else None if not ORIGINAL_PRICE: ORIGINAL_PRICE = SALE_PRICE if page.status_code!=200: raise ValueError('captha') data = { 'NAME':NAME, 'SALE_PRICE':SALE_PRICE, 'CATEGORY':CATEGORY, 'ORIGINAL_PRICE':ORIGINAL_PRICE, 'AVAILABILITY':AVAILABILITY, 'URL':url, } return data except Exception as e: print (e) def ReadAsin(): # AsinList = csv.DictReader(open(os.path.join(os.path.dirname(__file__),"Asinfeed.csv"))) AsinList = ['B0046UR4F4', 'B00JGTVU5A', 'B00GJYCIVK', 'B00EPGK7CQ', 'B00EPGKA4G', 'B00YW5DLB4', 'B00KGD0628', 'B00O9A48N2', 'B00O9A4MEW', 'B00UZKG8QU',] extracted_data = [] for i in AsinList: url = "http://www.amazon.com/dp/"+i print ("Processing: )"+url extracted_data.append(AmzonParser(url)) sleep(5) f=open('data.json','w') json.dump(extracted_data,f,indent=4) if __name__ == "__main__": ReadAsin() ```
哪位大神能解释下这个结果?
from lxml import etree import re html = ''' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title> 无标题页 </title><link href="css/style.css" rel="stylesheet" type="text/css" /> <script src="js/jquery.js" type="text/javascript"></script> <script src="js/js.js" type="text/javascript"></script> <script type="text/javascript" src="js/jquery.jmpopups-0.5.1.js"></script> <script type="text/javascript"> $.setupJMPopups({ screenLockerBackground: "#bababa" }); function openStaticPopup() { $.openPopupLayer({ name: "myStaticPopup", width: 250, target: "myHiddenDiv" }); } function openStaticPopup3() { $.closePopupLayer('sclist3'); parent.$.openPopupLayer({ name: "sclist3", width: 785, target: "xctckbox3" }); } </script> <script type="text/javascript"> function init(){ var dax=['日','一','二','三','四','五','六'] var a=new Date(); var year=a.getFullYear(); var month=format(a.getMonth()+1); var day=format(a.getDate()); var hour=format(a.getHours()); var minute=format(a.getMinutes()); var second=format(a.getSeconds()); var da=a.getDay(); var x=" 星期"+dax[da]+" "+ year+"/"+month+"/"+day+" "+hour+":"+minute+":"+second; document.getElementById("test").innerHTML=x; window.setTimeout(init,1000); } window.onload=init; function format(x){ return x>9?x:'0'+x; } </script> </head> <body> <form method="post" action="./GkResult.aspx?infoid=3160105094757" id="form1"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTAzNTE0MDQ2Nw9kFgICAw9kFgICAQ9kFgZmD2QWAgIBD2QWAgIBDw8WAh4EVGV4dAUJ5p2O6Zuo6aaZZGQCAQ9kFgICAQ9kFgICAQ8PFgIfAAWRA+W4gumVv+aCqOWlve+8mgogICAg5oiR5piv5LiA5ZCN5LqL5Lia5Y2V5L2N6YGX5bGe77yM55uu5YmN5q+P5pyI5Lqr5Y+X5py65YWz5LqL5Lia5Y2V5L2N6YGX5bGe5Zuw6Zq+6KGl5YqpNjgw5YWD44CC6K+l5qCH5YeG5Li6MjAxMuW5tDEw5pyI6LW35a6e5pa977yM6Iez5LuKM+W5tOayoeaciei/m+ihjOiwg+aVtOOAguiAjOW9k+WJjeeJqeS7t+awtOW5s+i+g+mrmO+8jOS4lOWFu+iAgemHkeavj+W5tOWdh+aciTEwJeeahOWinumVv+OAggogICAg6K+36Zeu5biC6ZW/6L+R5pyf5piv5ZCm5pyJ6LCD5pW06KGl5Yqp55qE5pS/562W77yM6Iul5rKh5pyJ6IO95ZCm6ICD6JmR5oyJ5LiA5a6a5q+U5L6L5o+Q6auY77yM5q+V56ufNjgw5YWD56Gu5a6e55Sf5rS75Zuw6Zq+77yM5oSf6LCi6aKG5a+844CCZGQCAg9kFgICAQ9kFgICAQ8PFgIfAAWeBuaJv+WKnuWNleS9je+8mui/nuS6kea4r+W4guS6uuWKm+i1hOa6kOWSjOekvuS8muS/nemanOWxgArlip7nkIbnu5PmnpzvvJrnu4/mn6Us5rGf6IuP55yB5Lq65Yqb6LWE5rqQ56S+5Lya5L+d6Zqc5Y6F5ZKM6LSi5pS/5Y6FP+WFs+S6juiwg+aVtArnnIHnuqfmnLrlhbPjgIHkuovkuJrljZXkvY3lt6XkvZzkurrlkZjmrbvkuqHlkI7pgZflsZ7nlJ/mtLvlm7Dpmr7ooaXliqnmoIflh4YK55qE6YCa55+lPyjoi4/kurrnpL7jgJQybzEy44CVMzQ55Y+3KeinhOWumjrigJznnIHnuqfmnLrlhbPjgIHkuovkuJoK5Y2V5L2N5bel5L2c5Lq65ZGYKOWQiOmAgOS8keS6uuWRmCnmrbvkuqEs5YW26L+b5bGe6KGl5Yqp5qCH5YeG55Sx5Y6f5q+PCuS6uuavj+aciDUyMOWFg+aPkOmrmOWIsDY4MOWFg+KAnSzigJzmnKzpgJrnn6Xoh6oyMDEy5bm0MTDmnIgx5pelCui1t+aJp+ihjOKAneOAguaIkeW4guaNruatpOWItuWumuS6hj/lhbPkuo7osIPmlbTluILnuqfmnLrlhbPjgIHkuovkuJrljZXkvY0K5bel5L2c5Lq65ZGY5q275Lqh5ZCO6YGX5bGe55Sf5rS75Zuw6Zq+6KGl5Yqp5qCH5YeG55qE6YCa55+lPyjov57kurrnpL7lj5EK44CUMjAxMuOAlTQ0NOWPt+OAgei/nui0ouekvuOAlDIwMTLjgJUxMTnlj7cpLOaJp+ihjOeahOagh+WHhuOAgeaXtgrpl7TlkoznnIHnuqfljZXkvY3nm7jlkIzjgILor6XpgJrnn6XkuIvlj5HlkI4s55yB5ZKM5biC6Iez5LuK5pyq5pyJ5paw6KeE5a6aCuWHuuWPsOOAguiLpei/keacn+ecgeWHuuWPsOaWsOeahOinhOWumizmiJHku6zkvJrmipPntKfotK/liIfokL3lrp7jgIIgCmRkZMBRELC/8xC1xxmmhC2d0WH+GrfJjRkCXF4v3oyTxJlS" /> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="9CFE3A04" /> <div> <div id="all"> <div id="head"> <div id="headertop" style="height: 240px;"> </div> <div id="headtext" style="float: right; color: white; padding-right: 50px;"> <div id="test"> </div> </div> </div> <div id="count1"> <div id="dh"> 当前位置:市长信箱 &gt;&gt; 写信</div> <div id="center"> <div id="left"> <div id="wxts"> <div id="wxtstop" style="height: 80px;"> </div> <div id="text"> &nbsp;&nbsp; 欢迎您通过"市长信箱"这一便捷、高效的网上信访渠道反映诉求。您的来信,我们将按照一定程序,向有关单位交办或转办,并在一定时限内,由相关单位向您反馈处理结果。此外,我们还将选择一些案例进行公开回复,您如果不同意公开,请说明,我们将对您的信件严格保密。为便于有关部门向您了解相关情况,解决好您反映的问题和反馈办理结果,请填写真实姓名及联系方式。 </div> </div> <div id="cxbtn"> <a href="SZ_Search.aspx" class="a"> <img src="images/hfcxbtn.jpg" alt="" style="border: 0px;" /></a></div> </div> <div id="writeright" style="width: 742px"> <div id="" style="width: 720px; text-align: center; font-size: 13px;"> <div class="" style="margin-top: 20px;"> <table id="table" cellspacing="0" cellpadding="0" width="700" style="border-collapse: collapse; border: 4px solid #dceaed; margin-left: auto; background-color: White; margin-right: auto; font-size: 12px; height: 405px;"> <tr> <td valign="top" class="xctdbg" style="text-align: center; vertical-align: middle; width: 132px; background-color: #f2f2f2;"> <span style="color: #0b5696">来信人:</span></td> <td colspan="3" style="padding: 0 15px; height: 29px; width: 517px;"> <span id="lblXFName" style="line-height: 23px; font-size: 13px;"><font color="Black">李雨香</font></span> </td> </tr> <tr> <td valign="top" class="xctdbg" style="text-align: center; vertical-align: middle; width: 132px; background-color: #f2f2f2;"> <span style="color: #0b5696">来信内容:</span></td> <td colspan="3" style="padding: 0 15px;"> <br /> <br /> <span id="lblXFQuestion" style="display:inline-block;font-size: 13px; line-height: 23px; text-align: left">市长您好: 我是一名事业单位遗属,目前每月享受机关事业单位遗属困难补助680元。该标准为2012年10月起实施,至今3年没有进行调整。而当前物价水平较高,且养老金每年均有10%的增长。 请问市长近期是否有调整补助的政策,若没有能否考虑按一定比例提高,毕竟680元确实生活困难,感谢领导。</span></td> </tr> <tr> <td valign="top" class="xctdbg" style="text-align: center; vertical-align: middle; width: 132px; background-color: #f2f2f2"> <span style="color: #0b5696">回复内容:</span></td> <td colspan="3" style="padding: 0 15px"> <br /> <br /> <span id="lblXFanswer" style="display:inline-block;font-size: 13px; line-height: 23px; text-align: left">承办单位:连云港市人力资源和社会保障局 办理结果:经查,江苏省人力资源社会保障厅和财政厅?关于调整 省级机关、事业单位工作人员死亡后遗属生活困难补助标准 的通知?(苏人社〔2o12〕349号)规定:“省级机关、事业 单位工作人员(合退休人员)死亡,其进属补助标准由原每 人每月520元提高到680元”,“本通知自2012年10月1日 起执行”。我市据此制定了?关于调整市级机关、事业单位 工作人员死亡后遗属生活困难补助标准的通知?(连人社发 〔2012〕444号、连财社〔2012〕119号),执行的标准、时 间和省级单位相同。该通知下发后,省和市至今未有新规定 出台。若近期省出台新的规定,我们会抓紧贯切落实。 </span></td> </tr> </table> <br /> </div> <br /> <br /> <div id="Div1" style="height: 30px;"> </div> </div> </div> </div> </div> <div class="clear"> </div> <div id="fotter"> </div> </div> </div> </form> </body> </html> ''' selector = etree.HTML(html) item_all = {} item_all['xfr'] = selector.xpath('.//*[@id="lblXFName"]/text()') print item_all 为什么结果是 {'xfr': ''}
关于python爬虫问题,我想我走错思路了。
这是我代码 ``` import scrapy from scrapy.contrib.spiders import CrawlSpider,Rule from scrapy.contrib.linkextractors import LinkExtractor class Myspider(CrawlSpider): name="baidu" allowed_domains=['yuedu.baidu.com'] start_urls=['http://yuedu.baidu.com'] rules=(Rule(LinkExtractor(allow=('http://yuedu.baidu.com/book/list/15002',)),callback=('parse')),) def parse(self,response): self.log=('hi this is an item page! ~~~~~~~~~~~~~~~~~%s'% response.url) print self.log item=[] item=response.xpath('//span[@class="title"]/text()').extract() print item ``` 然后运行scrapy crawl baidu ![图片说明](https://img-ask.csdn.net/upload/201504/25/1429950879_392105.jpg) 看见了没hi this is an item page 下面是【】空的 搞了2小时了 怎么办啊 按照scrapy官方文档来的 不知道怎么错了 希望大神们解答!!!感激!
python的tkinter中的variable封装成类后调用无效?
学校要求开发一个小程序,目前我做了个查询天气的,当查询天气单独使用时,调用正常,可是import查询天气后,就出了bug 主程序代码: ``` from tkinter import * import WEATHER class main_menu: def __init__(self, master): master.title('主菜单') master.geometry('250x100') master.resizable(width=False, height=False) F1 = Frame(master) F2 = Frame(master) F1.pack(side=TOP) F2.pack(side=BOTTOM) weather_buttom = Button(F1, text='天气查询', command=self.init_weather) express_buttom = Button(F1, text='快递查询') plane_buttom = Button(F2, text='机票查询') train_buttom = Button(F2, text='车票查询') weather_buttom.pack(side=LEFT, pady=10, padx=10) express_buttom.pack(side=RIGHT, pady=10, padx=10) plane_buttom.pack(side=LEFT, pady=10, padx=10) train_buttom.pack(side=RIGHT, pady=10, padx=10) def init_weather(self): weather_window = Tk() weather = WEATHER.Weather(weather_window) weather_window.mainloop() if __name__ == '__main__': tk = Tk() main = main_menu(tk) tk.mainloop() ``` 天气查询实现的代码: ``` import time from selenium import webdriver #导入Selenium的webdriver from selenium.webdriver.common.keys import Keys #导入Keys from tkinter import * class Weather: def __init__(self, master): master.title('天气查询') master.resizable(width=False, height=False) F1 = Frame(master) F2 = Frame(master) F1.pack(side=TOP) F2.pack(side=BOTTOM) self.var = StringVar() self.var.set('aaaaa') self.e = Entry(F1) self.e.pack(side=LEFT, padx=5, pady=5) b = Button(F1, text='确认', command=self.__search) b.pack(side=RIGHT, padx=5, pady=5) L = Label(F2, textvariable=self.var, height=3) L.pack(side=BOTTOM) def __search(self): city = self.e.get() print('查询需要一定时间,请稍候...') driver = webdriver.PhantomJS() #指定使用的浏览器,初始化webdriver driver.get("http://www.tianqi.com/") #请求网页地址 assert "天气" in driver.title #看看 关键字 是否在网页title中,如果在则继续,如果不在,程序跳出。 search = driver.find_element_by_xpath('//*[@id="index_serch"]/input') #找到xpath元素,这里是个搜索框 search.clear() #清空搜索框中的内容 search.send_keys(city) #在搜索框中输入city search.send_keys(Keys.RETURN) #相当于回车键,提交 temperature_text = driver.find_element_by_xpath('/html/body/div[5]/div/div[1]/dl/dd[3]/p/b').text temperature_now = '%s当前温度:%s ℃'%(city, temperature_text) weather_text = driver.find_element_by_xpath('/html/body/div[5]/div/div[1]/dl/dd[3]/span/b').text weather_now = '%s当前天气:%s'%(city, weather_text) text = '查询城市:%s\n' \ '%s\n' \ '%s'%(city, weather_now, temperature_now) self.var.set(text) print(text) driver.close() #关闭webdriver if __name__ == '__main__': root = Tk() weather = Weather(root) root.mainloop() ``` 查询天气中的self.var在把查询天气单独使用时,可以正常赋值,而当在menu中调用查询天气,self.var就无效了
python爬虫scrapy爬取了数据无法写入json
用scrapy成功爬取了商品数据,但是到目录下却发现数据文件没有创建,郁闷。。pipelines文件代码如下 ``` import codecs import json class AutopjtPipeline(object): def _int_(self): self.file=codecs.open("77.json","wb",encoding="utf-8") def process_item(self, item, spider): for j in range(0,len(item["name"])): name = item["name"][j] price=item["price"][j] comnum = item["comnum"][j] link = item["link"][j] # 将当前页下第j个商品的name、price、comnum、link等信息处理一下,重新组合成一个字典 goods = {"name": name, "price": price, "comnum": comnum, "link": link} # 将组合后的当前页中第j个商品的数据写入json文件 i = json.dumps(dict(goods), ensure_ascii=False) line = i + '\n' self.file.write(line) # 返回item return item def close_spider(self,spider): self.file.close() ``` 同时报错 Traceback (most recent call last): File "c:\users\93422\appdata\local\programs\python\python35\lib\site-packages\twisted\internet\defer.py", line 654, in _runCallbacks current.result = callback(current.result, *args, **kw) File "C:\Users\93422\Desktop\python\autopjt\autopjt\pipelines.py", line 28, in close_spider self.file.close() AttributeError: 'AutopjtPipeline' object has no attribute 'file' items文件代码以及爬虫代码都基本没问题,爬虫代码如下 ```import scrapy from autopjt.items import AutopjtItem from scrapy.http import Request class AutospdSpider(scrapy.Spider): name = 'autospd' allowed_domains = ['dangdang.com'] start_urls = ['http://category.dangdang.com/pg1-cid4003872-srsort_sale_amt_desc.html' ] def parse(self, response): item=AutopjtItem() item['name']=response.xpath("//p[@class='name']/@title").extract() item['price']=response.xpath('//span[@class="price_n"]/text()').extract() item['link']=response.xpath('//p[@class="name"]/@href').extract() item['comnum']=response.xpath('//a[@ddclick]/text()').extract() yield item for i in range(1,20): url="http://category.dangdang.com/pg"+str(i)+"-cid4003872-srsort_sale_amt_desc.html" yield Request(url,callback=self.parse) ```
爬虫失败 - 京东搜索结果
导出的结果是一张只有表头没有数据的空表。 ``` #信息采集:名称、价格、评论数、商家名称等 import requests from lxml import etree from pandas import DataFrame import pandas as pd jdInfoAll=DataFrame() for i in range(1,4): url="https://search.jd.com/Search?keyword=bosch&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&bs=1&suggest=1.his.0.0&ev=exbrand_%E5%8D%9A%E4%B8%96%EF%BC%88BOSCH%EF%BC%89%5E&page="+str(i) res=requests.get(url) res.encoding='utf-8' root=etree.HTML(res.text) name=root.xpath('//*[@id="J_goodsList"]/ul/li[@class="gl-item"]/div/div[@class="p-name p-name-type-2"]/a/em/text()[2]') for i in range(0,len(name)): name[i]=re.sub('\s','',name[i]) print(i) #sku sku=root.xpath('//*[@id="J_goodsList"]/ul/li/@data-sku') print(sku) #价格 price=[] comment=[] for i in range(0,len(sku)): thissku=sku[i] priceurl="https://p.3.cn/prices/mgets?callback=jQuery6775278&skuids=J_"+str(thissku) pricedata=requests.get(priceurl) pricepat='"p":"(.*?)"}' thisprice=re.compile(pricepat).findall(pricedata.text) price=price+thisprice commenturl="https://club.jd.com/comment/productCommentSummaries.action?my=pinglun&referenceIds="+str(thissku) commentdata=requests.get(commenturl) commentpat='"CommentCount":(.*?),"' thiscomment=re.compile(commentpat).findall(commentdata.text) comment=comment+thiscomment #商家名称 shopname=root.xpath('//*[@id="J_goodsList"]/ul/li[@class="gl-item"]/div/div[@class="p-shop"]/span/a/@title') print(shopname) jdInfo=DataFrame([name,price,shopname,comment]).T jdInfo.columns=['产品名称','价格','商家名称','评论数'] jdInfoAll=pd.concat([jdInfoAll,jdInfo]) jdInfoAll.to_excel('jdInfoAll.xls') ```
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
深深的码丨Java HashMap 透析
HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口 **HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用 **HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问