项目需求:
有成千上万个域名,想查询哪些域名已经被百度收录,收量的页面数量有多少?
直接找网上的代码改了一下,基本满足需求了,运行界面如下:

将被百度收录的域名保存下来:

最开始在网上找的是通过”http://www.baidu.com/s?wd=”的方式来查询百度收录的,不过这种方式查询的百度收录准确率只有90%多,有些用site命令查找并没有收录的网站也会被误判为收录,而且无法取到百度的收录量。后来通过抓取site页面结果的方式,可以准确地取到收录量,而且数据也精确了。
运行代码时,第一次我将sleep设为3秒,跑了一个晚上没问题,第二天到10点多钟卡住不动了。第二次晚上开跑,跑了2个多小时,又卡在那儿不动了。估计是查询太过频繁IP被百度禁止了。
由于是自己用的,我两种方式的代码都保存了下来,所以下面的代码变成了一个大杂烩。其实真要用的话,拿check_index_number这个函数稍微改改就可以了,可以精简很多代码。
3 |
from random import randint |
7 |
"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" , |
8 |
"X-Forwarded-For" : '%s:%s:%s:%s' % (randint(1, 255), |
9 |
randint(1, 255), randint(1, 255), randint(1, 255)), |
10 |
"Content-Type" : "application/x-www-form-urlencoded" , |
11 |
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" , |
12 |
"Connection" : "keep-alive" } |
16 |
def check_index_number(url): |
22 |
url_a = 'https://www.baidu.com/s?wd=site%3A' |
23 |
url_b = '&pn=1&oq=site%3A52pojie.cn&ie=utf-8&usm=1&rsv_idx=1&rsv_pq=dd6157d100015d1f&rsv_t=9a3eHncH3YeAeoblNqMm1f3%2FAQsJeSgF03XLXg6VDz6VqSprqUL8lGGO3us' |
24 |
joinUrl = url_a + url + url_b |
25 |
# print joinUrl #拼接URL |
26 |
html_Doc = requests.get(joinUrl, headers=HEADERS) |
27 |
response = etree.HTML(html_Doc.content) |
29 |
index_number = response.xpath( '//*[@id="1"]/div/div[1]/div/p[3]/span/b/text()' )[0] |
37 |
with open(filepath, "r" ) as f: |
46 |
r.encoding = r.apparent_encoding |
53 |
url = link.replace( "http://" , "" ).replace( "/" , "%2F" ) |
54 |
url = "http://www.baidu.com/s?wd=" + url |
56 |
with open( "result.txt" , 'a' ) as f: |
57 |
if "很抱歉,没有找到与" in html or "没有找到该URL" in html: |
61 |
indexed_number = check_index_number(link) |
62 |
f.write(link+ '\t' +str(indexed_number)+ '\n' ) |
67 |
filepath = "20181105-new.txt" # 待查询的URL链接文本,一行一个 |
68 |
urls = getUrl(filepath) |
78 |
if __name__ == '__main__' : |
转载请注明:XAMPP中文组官网 » 百度收录批量查询Python版(Request+Xpath)