2024年最新Python中高级面试题,看不到小说?直接爬虫(1),Python最新大厂面试真题总结

收集整理了一份《2024年最新Python全套学习资料》免费送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来

如果你需要这些资料,可以添加V无偿获取:hxbc188 (备注666)
img

正文

import time

from lxml import etree

import requests

import os

2.大体框架:

class Spider(object):

def init(self):

self.driver_path = r’D:\CHROM\chrome\chromedriver.exe’

self.options = Options()

self.options.add_argument(‘–headless’)

self.options.add_argument(‘–disable-gpu’)

self.driver = webdriver.Chrome(executable_path=self.driver_path,options=self.options)

self.base_url = ‘http://www.xbiquge.la’

self.headers = {

‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36’

}

def interactive(self):

self.driver.get(‘http://www.xbiquge.la/’)

#我运行的时候,为了避免网速不好,休息两秒钟

time.sleep(2)

#搜索方法,该方法返回首页网页的html源代码

text = self.search()

#输出可选择书籍的列表,该方法返回的是书籍列表的url

url_list = self.show_list(text)

#选择合适的书籍并爬取章节

self.spider(url_list)

#保存至本地

说明:selenium模拟浏览器,如果不指定一定的参数,模拟的过程会默认展示出来,为了减少这种情况的出现,所以加上了这三行代码:

self.options = Options()

self.options.add_argument(‘–headless’)

self.options.add_argument(‘–disable-gpu’)

3.完成搜索方法self.search():

def search(self):

book_name = input(‘请输入搜索书籍的名字:’)

#获取输入框的input标签和搜索按钮的button标签

search_tag = self.driver.find_element_by_name(‘searchkey’)

button_tag = self.driver.find_element_by_id(‘sss’)

#这里采用send_keys(xxxx)方法,向输入框输入内容然后点击按钮即可

search_tag.send_keys(book_name)

button_tag.click()

time.sleep(1)

#获取html源码

text = self.driver.page_source

#返回源码

return text

好的,接下来分析下如何写获取input和button代码:如何获取标签-01

首先鼠标放于此处并右击,选择检查可以得到以下图片的内容:如何获取input和button标签-02

可以看见,这两个标签都是容易获取的,因为selenium对于input有一个专门的name方法,而button标签则有id属性,更是容易获取。因此,可以采用下面这两行获取相应的标签:

search_tag = self.driver.find_element_by_name(‘searchkey’)

button_tag = self.driver.find_element_by_id(‘sss’)

4.完成输出可选择书籍列表的信息函数self.show_list():

def show_list(self,text):

#使用lxml库解析html源代码

html = etree.HTML(text)

#获取书籍信息

bookNameList = html.xpath(‘//table//tr//td[@class=“even”]//a/text()’)

bookUrlList = html.xpath(‘//table//tr//td[@class=“even”]//a/@href’)

lastestChapterList = html.xpath(‘//table//tr//td[@class=“odd”]//a/text()’)

authorList = html.xpath(‘//table//tr//td[@class=“even”]/text()’)

updateDateList = html.xpath(‘//table//tr//td[@align=“center”]/text()’)

#输出书籍信息

for name,author,chapter,date in zip(bookNameList,authorList,lastestChapterList,updateDateList):

info = ‘’’

name    : {bookName}

author  : {authorName}

chapter : {chapterName}

date    : {updateDate}

‘’'.format(bookName=name,authorName=author,chapterName=chapter,updateDate=date)

print((‘book info of %s’ % name).center(80,‘-’))

print(info)

#返回相应书籍对应url列表

return bookUrlList

好的,接下来分析下这段代码的思路:首先,我们随意输入一本书的名字或者作者的名字(这里我以辰东为例),如下图:输出书籍列表函数-01

接下来,我们鼠标放于此处并右击检查,可以得到下面图片的信息:输出书籍列表函数-02

显然,上面标注的就是我们需要获取的信息。好的,下面我们只需按部就班的使用xpath(lxml中支持的语法)去获取相应信息即可,采用的以下几个语句:

#获取书籍信息

bookNameList = html.xpath(‘//table//tr//td[@class=“even”]//a/text()’)

bookUrlList = html.xpath(‘//table//tr//td[@class=“even”]//a/@href’)

lastestChapterList = html.xpath(‘//table//tr//td[@class=“odd”]//a/text()’)

authorList = html.xpath(‘//table//tr//td[@class=“even”]/text()’)

updateDateList = html.xpath(‘//table//tr//td[@align=“center”]/text()’)

为了输出的美观,采用了一定手段,这里就不多赘述。下面是美化后输出的形式举例:输出书籍列表函数-03

5.完成获取小说内容的函数 self.spider():

def spider(self,url_list):

#这里用户根据之前输出的书籍列表输入相应的数字

decision = int(input(‘请选择合适的书籍(输入序号,ex:1 2 3 ):’))

target_url = url_list[decision-1]

#由于该网站的反爬不是很严格,所以这里只设置了headers参数里的user-agent

response = requests.get(target_url,headers=self.headers)

text = response.content.decode(‘utf-8’)

#这里采用lxml方法获取所有章节的url

html = etree.HTML(text)

#这里有两个辅助函数,主要是为了让代码更易读

chapter_url_list = self.spider_get_urls(html)

#爬取小说对应url的内容

self.spider_get_content(chapter_url_list)

好的,开始分析:首先,我们随意打开一本辰东大神的书(这里我选择的是《圣墟》):获取书籍内容函数-01

鼠标放于此处并右击,可得以下信息:获取书籍内容函数-02

这里你会发现,这个网站并没有将章节分页,所以上图的所有dd标签即为所有的章节,然后我们就可以采用lxml库对于这个网页解析获取对应的url-----即self.spider_get_urls()函数

def spider_get_urls(self,html):

#获取所有的a标签里面的url链接

chapter_list = html.xpath(‘//div[@class=“box_con”]//dl//dd/a/@href’)

#对于url进行拼接为完整的url

for i in range(len(chapter_list)):

chapter_list[i] = self.base_url + chapter_list[i]

#返回url列表

return chapter_list

这里a标签的href属性的url只有一半,如:/13/13959/5939039.html,需要我们进行拼接为完整的url。接下来我们开始下载内容即self.spider_get_content() 函数:

def spider_get_content(self,chapter_url_list):

info_dict = {}

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

如果你需要这些资料,可以添加V无偿获取:hxbc188 (备注666)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

如果你需要这些资料,可以添加V无偿获取:hxbc188 (备注666)
[外链图片转存中…(img-TNItoiQq-1713841893289)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值