老师,视频里面的网页版的教程在哪能看到
代码:
from scrapy.cmdline import execute execute('scrapy crawl baidu'.split())
老师请问一下,为什么我运行execute代码的时候直接报错了,而且我创建的baidu.py文件中的def parse(self,response)中的self,response这里提示我也有问题,请问老师这个是什么原因?
1楼的问题能解答一下吗?我的也是
老师,start01.bat点击后只闪了一下就结束了,内容看不出有什么问题
老师,我这个打印不出来内容是为啥,看下面的评论说没联网,可是我网络也没问题啊
代码:
from fake_useragent import UserAgent import requests from lxml import etree from time import sleep def get_html(url): ''' :param url: 要爬取的地址 :return: 返回html ''' headers = {"User-Agent": UserAgent().chrome} resp = requests.get(url, headers=headers) # sleep(2) if resp.status_code == 200: resp.encoding = 'utf-8' return resp.text else: return None def parse_list(html): ''' :param html: 传递进来一个有电影列表的html :return: 返回一个电影列表的url ''' e = etree.HTML(html) list_url = ['http://maoyan.com{}'.format(url) for url in e.xpath('//dd/div[@class="movie-item film-channel"]/a/@href')] return list_url def pares_index(html): ''' :param html: 传递进来一个有电影信息的html :return: 已经提取好的电影信息 ''' e = etree.HTML(html) name = e.xpath('//div/h1/text()')[0] type = e.xpath('//div/ul/li[@class="ellipsis"]/a/text()')[0] actors = e.xpath('//div[@class="celebrity-group"][2]/ul[@class="celebrity-list clearfix"]/li/div/a/text()') actors = format_data(actors) return {"name": name, "type": type, "actors": actors} def format_data(actors): actor_set = set() for actor in actors: actor_set.add(actor.strip()) return actor_set def main(): num = int(input('请输要获取多少页:')) for page in range(num): url = "https://maoyan.com/films?showType=3&offset={}".format(page*30) list_html = get_html(url) list_url = parse_list(list_html) for url in list_url: info_html = get_html(url) movie = pares_index(info_html) print(movie) if __name__ == '__main__': main()
def parse_info(self, response): total_price = response.xpath('concat(//span[@class="total"]/text(),//span[@class="unit"]/span/text())').extract_first() community_name = response.xpath('//div[@class="communityName"]/a[@class="info"]/text()').extract_first() area_name = response.xpath('string(//div[@class="areaName"]/span[2])').extract_first()
老师为什么我获得response之后用xpath提取信息,能够正确获得总价total_price,但是小区名称就一直返回None,xpath表达式没有错,在浏览器上用xpath helper也能提取出来,就是pycharm调试的时候不行
老师,这里爬到一些数据像是转码过了,有什么办法解码吗
from fake_useragent import UserAgent import requests from lxml import etree #解析库 def get_html(url): ''' param url:要爬取的地址 return:返回html ''' headers={"User-Agent":UserAgent().chrome} resp=requests.get(url,headers=headers) #发送请求 if resp.status_code ==200: resp.encoding='utf-8' #设置字符集 return resp.text else: return None def parse_list(html): ''' param url:传递进来一个有电影列表的html return:返回一个电影列表的url ''' # if html: #html在有值的情况下在做解析 e=etree.HTML(html) list_url=['http://maoyan.com{}'.format(url) for url in e.xpath('//div[@class="movie-item-hover"]/a/@href')] return list_url def pares_index(html): ''' param url:传递进来一个有电影具体信息的html return:提取好的电影具体信息 ''' e = etree.HTML(html) name = e.xpath('//h1[@class="name"]/text()') type = e.xpath('//li[@class="ellipsis"][1]/a/text()') content = e.xpath('//span[@class="dra"]/text()') return {"name":name,"type":type,"content":content} # actors=e.xpath('') # actors=format_data(actors) # 有重复的演员名字,需要去重 # def format_data(actors): # actor_set=set() # for actor in actors: # actor_set.add(actor.strip()) #strip去空格 # return actor_set def main(): '''控制上述方法的实施,分配相应的url''' num = int(input('请输入多少页:')) for page in range(num): url="https://maoyan.com/films?showType=1&offset={}".format(page*30) list_html=get_html(url) #发送请求 list_url=parse_list(list_html) #解析list_html,返回list_url每个电影的信息 for url in list_url: info_html=get_html(url) movie = pares_index(info_html) print(movie) if __name__ =='__main__': main()
老师,这个代码只运行到请输入多少页,然后就运行结束了。哪里出错了?
老师我的代码是按照视频里面敲的,但是运行的时候就会出错,只可以爬取几条数据,麻烦老师帮我看下子
from selenium import webdriver from time import sleep from lxml import etree # 构造浏览器 chrome = webdriver.Chrome() # 发送请求 url = 'https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&enc=utf-8&wq=%E7%AC%94%E8%AE%B0%E6%9C%AC&pvid=ce58b28b72ae48c190c8451125b8f894' chrome.get(url) # 拉动滚动条到底部,注意的是代码应该写在获取网页源码之前 js = 'document.documentElement.scrollTop=100000' chrome.execute_script(js) sleep(3) html = chrome.page_source e = etree.HTML(html) # titles = e.xpath('//div[@class="p-name p-name-type-2"]/a/em/text()') titles = e.xpath('//div[@id="J_goodsList"]//div[@class="p-name p-name-type-2"]/a/@title') prices = e.xpath('//div[@id="J_goodsList"]//div[@class="p-price"]/strong/i/text()') for title,price in zip(titles,prices): print(title,':',price) print(len(price)) chrome.quit()
class ZolSpider(scrapy.Spider): name = 'zol' allowed_domains = ['faloo.com'] start_urls = ['https://b.faloo.com/1216400_1.html'] def parse(self, response): name = response.xpath('//h1/text()').extract_first() content = response.xpath('//div[@class="noveContent"]/p/text()').extract() next_url = response.xpath('//*[@id="next_page"]/@href').get() yield { 'name':name, 'content':content } yield scrapy.Request('https:'+next_url,callback=self.parse)
老师我有两个问题 parse这个方法是只要有url无限传递 那他就会无限爬取吗 类似于爬虫加个for循环吗
这样只有在没有url了以后才会停止爬取 那要是想控制爬取的次数 或者说达到一定条件停止爬取 那这样应该怎么控制呢 yield有能像for循环那样能跳出语句的操作吗
from fake_useragent import UserAgent import requests from pyquery import PyQuery as pq url = 'https://www.qidian.com/finish' headers = {'User-Agent':UserAgent().random} resp = requests.get(url,headers=headers) doc = pq(resp.text) name = [a.text for a in doc('h4 a')] book = doc('a[class="name"]').text()
老师,怎么使用pyquery提取作者名字啊,里面含有跟作者名称一样的a标签,我试了好久就是没提取出来,而且这个是不规律的,没法使用if进行筛选
老师,这是怎么回事啊?我的数据库连接正常啊,但是tomcat出不来
url = f'https://www.maoyan.com/films?showType=2&offset=0' headers = { 'User-Agent': UserAgent().chrome } resp = requests.get(url , headers=headers) e = etree.HTML(resp.text) movie_title = e.xpath('//dl[@class="movie-list"]/dd/div[@class="channel-detail movie-item-title"]/@title') # movie_href = e.xpath("//dl[@class='movie-list']/dd/div[@class='channel-detail movie-item-title']/a/@href") print(movie_title) # for i in movie_title: # print(i)
老师,为啥我获取到的title和href值都只有1个
找了所有浏览器连负载都没有都不介绍一下
老师我有两个问题 parse这个方法是只要有url无限传递 那他就会无限爬取吗 类似于爬虫加个for循环
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637