首先先附上整体代码
# _*_coding :utf-8 _*_
# @time 2023/7/14 20:24
# @Author :volcano
# @File 爬取小说
# @Proect :workspace
#模拟浏览器对服务器发送请求
#导入请求模块
import requests
#导入解析模块
import parsel
url='https://www.bbiquge.net/book/133303/56520853.html'#用自定义的变量接收字符串的数据内容
response=requests.get(url)
response.encoding='gbk'
#一种编译格式
# print(response.text)
selector=parsel.Selector(response.text)
#h1::text提取h1标签当中的文本 get的意思是获得的意思
title=selector.css('#main > h1::text').get()
title_2=selector.xpath('//*[@id="main"]/h1/text()').get()
print(title)
contest=selector.css('#content::text').getall()
string="\n".join(contest)
print(string)
with open(r'D:\爬取文本存放位置\一百种爬虫方式\单篇小说的提取'+title+'.txt',mode='w', encoding='utf-8') as f:
f.write(title)
f.write(string)
效果图:
在进行网络爬虫时,我们经常需要模拟浏览器发送请求,并从服务器获取到数据。本文将介绍如何使用Python中的requests模块发送请求,并使用解析库解析返回的数据。同时,我们还将了解到在数据解析过程中使用CSS选择器和XPath的情况,以及在无法获取标签时使用正则表达式的情况。
首先,我们导入requests模块,这是一个用于发送HTTP请求的强大工具。然后,我们指定要请求的URL,并使用requests.get()
方法发送GET请求获取服务器的响应。
import requests
url = 'https://www.bbiquge.net/book/59265/57967084.html'
response = requests.get(url)
print(response.text)
上述代码中,我们通过response.text
打印出了服务器返回的数据内容。
接下来,我们需要对获取到的数据进行解析。常用的解析库有cssselect、lxml、parsel等,这些库可以使用CSS选择器或XPath来提取数据。
举个例子,假设我们想要提取文章的标题,可以使用CSS选择器或XPath进行定位和提取。
使用CSS选择器的示例代码如下:
import requests
import parsel
url = 'https://www.bbiquge.net/book/59265/57967084.html'
response = requests.get(url)
selector = parsel.Selector(response.text)
title = selector.css('#main > h1::text').get()
print(title)
上述代码中,我们使用parsel
库解析了获取到的HTML文本,并通过CSS选择器定位到标题所在的h1标签,然后使用.get()
方法提取出标题的文本内容。
如果你更习惯使用XPath,可以使用类似下面的代码:
import requests
import parsel
url = 'https://www.bbiquge.net/book/59265/57967084.html'
response = requests.get(url)
selector = parsel.Selector(response.text)
title = selector.xpath('//*[@id="main"]/h1/text()').get()
print(title)
注意,使用XPath时,我们需要在提取路径后加上.get()
以获取文本内容。
另外,我们还可以通过CSS选择器或XPath来提取其他标签中的数据。
接下来,我们可以将提取到的数据保存到本地文件中。使用open()
函数打开文件,并使用write()
方法将数据写入文件中。
下面是保存文本内容的示例代码:
import requests
import parsel
url = 'https://www.bbiquge.net/book/59265/57967084.html'
response = requests.get(url)
selector = parsel.Selector(response.text)
title = selector.css('#main > h1::text').get()
contest = selector.css('#content::text').getall()
string = "\n".join(contest)
with open(title + '.txt', mode='w', encoding='utf-8') as f:
f.write(title)
f.write(string)
上述代码中,我们使用open()
函数创建一个文件,将标题和内容写入文件中,并以UTF-8编码保存。在保存内容时,我们使用join()
方法将列表中的每一行内容用换行符连接起来,实现分行保存。
需要注意的是,使用open()
函数打开文件时,可以指定文件保存的路径。
with open(r'D:\爬取文本存放位置\一百种爬虫方式\单篇小说的提取'+title+'.txt',mode='w', encoding='utf-8') as f: