Python爬虫-专业数据库书名爬取

1需求分析:

获取情报学学科可参考的相关的书目名称

 

2抓取对象

在超星数据库读秀数据库中检索,选取读书检索,输入目次字段为“情报学”

检索结果如下:

Python爬虫-专业数据库书名爬取_第1张图片

3源码分析:

查看源代码页,找到图书标题所在的代码行

Python爬虫-专业数据库书名爬取_第2张图片

对应行为:

情报论》

进行初步观察后发现,目标行所在标签为a,对应的属性有href和target两个,但是href对应的超链接是每个书对应的新的页面地址,因此无法精确标识,故选取target属性进行定位,对应代码:

p = soup.find_all('a',{'target':'_blank'})

4正则解析:

 

定位到核心源码段后,需要对源码进行正则解析,获取需要截取的图书名称,观察后发现图书名称被显示在《》中间,因此需要先提取《》中的字段,对应代码为:

p1 = re.compile(r'[《](.*?)[》]', re.S)

这样就可以获取《》中间的信息了,例如得到的第一个结果为“情报论”。但是由于搜索时的字段匹配,“情报”二字被标红显示,也就是源码中“”和“”所代表的含义。将这些冗余的信息剔除,相当于在一个字段中提取中文字符,对应代码为:

result = re.findall(p1, item.get_text())

这样就得到我们想要的结果了。

5完整代码:

import requests
from bs4 import BeautifulSoup
import re
url = 'http://book.duxiu.com/search?channel=search>ag=&sw=%E6%83%85%E6%8A%A5%E5%AD%A6&ecode=utf-8&Field=6&Sort=&adminid=275&btype=0&seb=0&pid=0&year=§year=&showc=0&fenleiID=&searchtype=&authid=0&exp=0&expertsw=&Pages='
j = 1
for i in range(10):
    r = requests.get(url+str(j))
    soup = BeautifulSoup(r.text,'lxml')
    r.status_code
    p = soup.find_all('a',{'target':'_blank'})
    for item in p:
        p1 = re.compile(r'[《](.*?)[》]', re.S)
        result = re.findall(p1, item.get_text())
        if len(result)>0:
            with open(r'C:\Users\zhang\Desktop\books.txt','a+') as f:
                f.write('《{}》'.format(str(result)[2:-2]))
    j+=1

 

你可能感兴趣的:(爬虫)