使用python爬取豆瓣音乐Top250并按照歌名、歌手、发行时间、音乐类别、评价人数以及评论 共计6个字段进行存储,需反爬
时间: 2024-02-01 22:02:17 浏览: 47
好的,这是一个比较复杂的任务,需要用到Python的requests库和BeautifulSoup库进行网页爬取和解析。同时,为了反爬,我们还需要使用一些技巧,如设置headers、使用代理IP等。
以下是基本的代码框架,你可以根据具体情况进行修改:
```python
import requests
from bs4 import BeautifulSoup
import random
def get_html(url, headers=None, proxies=None):
try:
response = requests.get(url, headers=headers, proxies=proxies)
if response.status_code == 200:
return response.text
else:
print('Status Code Error:', response.status_code)
return None
except Exception as e:
print('Error:', e)
return None
def parse_html(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('tr', class_='item')
for item in items:
name = item.find('div', class_='pl2').find('a').text.strip()
artist = item.find('p', class_='pl').text.strip()
info = item.find('p', class_='pl').text.strip().split('/')
time = info[-2].strip()
genre = info[-3].strip()
rate = item.find('span', class_='rating_num').text.strip()
comments = item.find('span', class_='inq').text.strip()
print(name, artist, time, genre, rate, comments)
def main():
url = 'https://music.douban.com/top250'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {
'http': 'http://127.0.0.1:1080',
'https': 'https://127.0.0.1:1080'
}
html = get_html(url, headers=headers, proxies=proxies)
parse_html(html)
if __name__ == '__main__':
main()
```
这段代码会爬取豆瓣音乐Top250的网页,并解析出歌名、歌手、发行时间、音乐类别、评价人数以及评论,然后打印出来。其中,get_html函数用于获取网页源代码,parse_html函数用于解析网页内容,main函数是程序的入口。
你需要注意的是,为了反爬,我们在请求网页时设置了headers和proxies。headers用于模拟浏览器请求,proxies用于设置代理IP。这里的代理IP是本地的,你需要根据自己的情况进行修改。
如果你需要将数据存储到数据库或者文件中,可以在parse_html函数中添加相应的代码。
阅读全文