为了实践学习,需要从https://www.example.com网页中提取所有class为listbox的div元素中li里的标题,点击li可进入第二个页面,获取第一个页面的title和第二个页面里class为art_con的div元素中的p中字段,并将数据存入名为sj.txt文件中,应该怎么操作
时间: 2023-06-01 18:01:30 浏览: 47
这个问题涉及到网页爬虫和数据存储两个方面,需要使用Python语言和相关的库来实现。
1. 网页爬虫
使用Python中的requests库发送HTTP请求获取网页内容,使用BeautifulSoup库解析HTML文档,提取需要的数据。
具体的代码可以参考如下:
```
import requests
from bs4 import BeautifulSoup
url = 'https://www.example.com'
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
listboxes = soup.find_all('div', {'class': 'listbox'})
titles = []
for listbox in listboxes:
lis = listbox.find_all('li')
for li in lis:
title = li.get_text()
link = li.find('a')['href']
# 点击li进入第二个页面
response2 = requests.get(link)
html2 = response2.text
soup2 = BeautifulSoup(html2, 'html.parser')
# 获取第一个页面的title和第二个页面里class为art_con的div元素中的p中字段
title1 = soup.find('title').get_text()
content = soup2.find('div', {'class': 'art_con'}).get_text()
# 存入sj.txt文件中
with open('sj.txt', 'a', encoding='utf-8') as f:
f.write(title1 + '\n' + content + '\n')
```
2. 数据存储
将抓取到的数据存储到本地文件中,可以使用Python中的文件操作。
在上面的代码中,使用了with open语句打开文件,文件的写入模式为追加模式('a'),编码格式为UTF-8。每次循环抓取到一个li标签的标题和内容后,就将它们写入文件中。
需要注意的是,如果文件不存在,with open语句会自动创建文件;如果文件已存在,则会在文件末尾追加内容。如果希望每次运行时覆盖原有文件,可以改为写入模式('w')。