欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬取豆瓣读书-用户信息页链接(Python爬虫实战)

程序员文章站 2022-04-08 23:20:09
...

接着上一篇博客(爬取豆瓣读书-用户所有阅读书籍名称、日期和书籍链接),进行对用户信息页链接抓取,采用BeautifulSoup框架
我的上一篇博客传送门
这篇博客主要是获取大量的用户介绍网页链接,这样结合上一篇博客,就可以获取大量用户的读书信息,供分析豆瓣读书中用户兴趣的相关研究者使用。废话不多说,直接上代码!!!

import requests
from bs4 import BeautifulSoup
import re

def GetUrlList(link):
    #保存用户信息页链接
    f=open("user_urls.csv","a",encoding="utf-8")
    res=requests.get(link,headers=headers)
    res.encoding='utf-8'
    soup=BeautifulSoup(res.text)
    url_text=str(soup.find_all("span",class_="comment-info"))
    #正则表达式匹配
    pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')  # 匹配模式
    user_urls=re.findall(pattern,url_text)
    #写入网页链接信息
    for url in user_urls:
        f.write(url+"\n")
    print(user_urls)
    print(len(user_urls))

#自行修改你的域名
start_link = 'https://book.douban.com/subject/1007305/comments/hot?p='
headers = {
    "Host": "book.douban.com",
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}

#获取用户评论页数
def get_pageNum():
    res=requests.get("https://book.douban.com/subject/1007305/comments/",headers=headers)
    res.encoding='utf-8'
    soup=BeautifulSoup(res.text)
    nums=soup.find_all('span',id='total-comments')
    print(nums)
    pageNum=re.findall('\d+',str(nums).replace("h1",""))[0]
    print(pageNum)
    return int(int(pageNum)/20)+1

if __name__=="__main__":
    # 页数
    depth =get_pageNum()
    for i in range(depth):
        print("正在抓取第"+str(i+1)+"页的用户链接...")
        link= start_link + str(i+1)
        GetUrlList(link)