python爬虫類:新浪ニュースデータを這い出す
1.爬虫類のブラウザの偽装原理:
新浪ニュースのトップページを登ってみると、相手のサーバーが爬虫類を遮断するため、403に戻ることがわかります.この場合、ブラウザに偽装して登る必要があります.
1.実戦分析:
ブラウザの偽装は一般的にヘッダによって行われます.
Webページを開き、F 12-Network-任意のサイトを押すと、Headers-Request HeadersのキーワードUser-Agentが爬虫類かブラウザかを識別します.
3.ニュース爬虫類
3.1需要:
新浪ニュースのトップページ(http://news.sina.com.cn/)すべてのニュースが現地に
3.2考え方:
まずトップページに登り、正則ですべてのニュースリンクを取得し、各ニュースを順番に登ってからローカルに保存します.
`
新浪ニュースのトップページを登ってみると、相手のサーバーが爬虫類を遮断するため、403に戻ることがわかります.この場合、ブラウザに偽装して登る必要があります.
1.実戦分析:
ブラウザの偽装は一般的にヘッダによって行われます.
Webページを開き、F 12-Network-任意のサイトを押すと、Headers-Request HeadersのキーワードUser-Agentが爬虫類かブラウザかを識別します.
import urllib.request
url='http://weibo.com/tfwangyuan?is_hot=1'
headers=('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0')
opener=urllib.request.build_opener()
opener.addheaders=[headers]
data=opener.open(url).read()
fh=open('F:/jupyterpycodes/python_pachongfenxi/result/ .html','wb')
fh.write(data)
fh.close()
import urllib.request
url1='http://www.icourse163.org/home.htm?userId=1396403034#/home/course'
headers1=('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0')
opener=urllib.request.build_opener()
opener.addheaders=[headers1]
data1=opener.open(url1).read()
fh=open('F:/jupyterpycodes/python_pachongfenxi/result/ .html','wb')
fh.write(data1)
fh.close()
3.ニュース爬虫類
3.1需要:
新浪ニュースのトップページ(http://news.sina.com.cn/)すべてのニュースが現地に
3.2考え方:
まずトップページに登り、正則ですべてのニュースリンクを取得し、各ニュースを順番に登ってからローカルに保存します.
import urllib.request
import re
data=urllib.request.urlopen('http://news.sina.com.cn/').read()
data2=data.decode('utf-8','ignore')
pat='href="(https://news.sina.com.cn/.*?)">'
allurl=re.compile(pat).findall(data2) #
for i in range(0,len(allurl)):
try:
print(' '+str(i)+' ')
thisurl=allurl[i]
file='F:/jupyterpycodes/python_pachongfenxi/result/sinanews/'+str(i)+'.html'
urllib.request.urlretrieve(thisurl,file)
print('—— ——')
except urllib.error.URLError as e:
if hasattr(e,'code'):
print(e.code)
if hasattr(e,'reason'):
print(e.reason)
0
404
Not Found
1
—— ——
2
—— ——
3
—— ——
4
—— ——
5
—— ——
6
—— ——
7
—— ——
8
—— ——
9
—— ——
10
—— ——
11
—— ——
12
—— ——
13
—— ——
14
—— ——
15
—— ——
16
—— ——
17
—— ——
18
—— ——
19
—— ——
20
—— ——
21
—— ——
22
—— ——
23
—— ——
24
—— ——
25
—— ——
26
—— ——
27
—— ——
28
—— ——
29
—— ——
30
—— ——
31
—— ——
32
—— ——
33
—— ——
34
—— ——
35
—— ——
36
—— ——
37
—— ——
38
—— ——
39
—— ——
40
—— ——
41
—— ——
42
—— ——
43
—— ——
44
—— ——
45
—— ——
46
—— ——
47
—— ——
48
—— ——
49
—— ——
50
—— ——
51
—— ——
52
—— ——
53
404
Not Found
54
404
Not Found
55
404
Not Found
56
404
Not Found
57
404
Not Found
58
404
Not Found
59
404
Not Found
60
404
Not Found
61
404
Not Found
62
404
Not Found
63
404
Not Found
64
404
Not Found
65
404
Not Found
66
404
Not Found
67
404
Not Found
68
404
Not Found
69
404
Not Found
70
404
Not Found
71
404
Not Found
72
404
Not Found
73
404
Not Found
74
404
Not Found
75
404
Not Found
76
404
Not Found
77
404
Not Found
78
404
Not Found
79
404
Not Found
80
404
Not Found
81
404
Not Found
82
404
Not Found
83
404
Not Found
84
404
Not Found
85
404
Not Found
86
404
Not Found
87
404
Not Found
88
404
Not Found
89
404
Not Found
90
404
Not Found
91
404
Not Found
92
404
Not Found
93
404
Not Found
94
404
Not Found
95
404
Not Found
96
404
Not Found
97
404
Not Found
98
404
Not Found
99
`