모든 기사 CSDN 홈을 크롤링의 세 가지 방법 : pyhton 파충류

모든 기사를 크롤링 1. 홈 CSDN

1.1 방법 1

import urllib.request
import re

url='http://blog.csdn.net/'

#伪装浏览器
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]
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
print(data)


pat='<div class="title"><h2> <a href="(.*?)"'
result=re.compile(pat).findall(data)

#下载到本地
for i in range(0,len(resture)):
    file='F:/jupyterpycodes/python_pachongfenxi/result'+str(i)+'.html'
    urllib.request.urlretrieve(resture[i],filename=file)
    print('第'+str(i)+'次爬取成功')


1.2 방법 2

import re
import urllib.request

def function():
    """Python爬虫爬取CSDND首页的所有的文章"""
    html="https://blog.csdn.net/nav/engineering"
    #模拟浏览器
    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')#这里用的是Fix浏览器进行爬取的一个报头如果是采用其他的这个报头就要进行更换
    opener=urllib.request.build_opener()
    opener.addheader=[headers]
    urllib.request.install_opener(opener)

    data = urllib.request.urlopen(html).read()
    data = data.decode("utf-8", "ignore")
    print(data)
    pattern='<h3 class="company_name"><a href="(.*?)"'
    mydata=re.compile(pattern).findall(data)
    print(mydata)
    for i in range(0,len(mydata)):
        file="F:/jupyterpycodes/python_pachongfenxi/result"+str(i)+".html"
        urllib.request.urlretrieve(mydata[i],filename=file)
        print("第%d次爬取成功"%i)

    print("CSDN爬虫结束")

1.3 방법 3

import re
import os
import urllib.request
import urllib.error

#设置用户浏览器代理

header=("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=[header]

#将header设置为全局

urllib.request.install_opener(opener)

url="http://blog.csdn.net/"

data=opener.open(url).read().decode("utf-8")

pat='''data-track-click='{"mod":"popu_459","con":",(.*?),'''

blogurl=re.compile(pat).findall(data)

#通过列表变为元组在变为列表的方式来进行除重

blogurl=list(set(blogurl))

#获取的链接数

pagesnum=len(blogurl)

#指定本地存放目录

localpath="F:/jupyterpycodes/python_pachongfenxi/result"

#如果没有这个目录则创建该目录

if not os.path.exists(localpath):

        os.mkdir(localpath)
print("该页面一共有"+str(pagesnum)+"篇文章")

#匹配每篇文章题目的正则表达式
pat2='''"keyword":"(.*?)"}'>'''
    
for i in range(0,len(blogurl)):
    try:

        thislink=blogurl[i]

        #获取文章标题
        data2=urllib.request.urlopen(thislink).read().decode("utf-8")

        name=re.compile(pat2).findall(data2)
            

        #下载该链接到本地        

        urllib.request.urlretrieve(thislink,localpath+str(name)+".html")

        #给文件重命名
        print("第"+str(i+1)+"/"+str(pagesnum)+"篇文章已成功爬取到本地......"+"\n")

        
    except Exception as e:

        print("第"+str(i+1)+"/"+str(pagesnum)+"下载失败\n原因是:"+str(e))

2. 프록시 :

그것은 우리의 인터넷 서버 중입니다. 프록시 서버에서 정보를 획득하고, 인터넷에 다음 프록시 서버, Xianxiang 프록시 서버가 요청을 찾아 정보 등을 사용하는 경우, 우리에게 돌아갑니다.
프록시 서버 파충류를 사용하여 IP 제한의 문제를 해결할 수 있습니다.

import urllib.request

 #设置代理服务器函数
def use_proxy(url,proxy_addr):
    proxy=urllib.request.ProxyHandler({'http':proxy_addr})
    opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
    urllib.request.install_opener(opener)
    urllib.request.urlopen(url).read().decode('utf-8','ingnore')
    return data

proxy_addr='119.183.220.224:8888'#尝试免费的代理IP
url='http://www.baidu.com'
data=use_proxy(url,proxy_addr)
print(len(data))
게시 47 개 원래 기사 · 원의 찬양 (35) · 전망 1817

추천

출처blog.csdn.net/weixin_43412569/article/details/104854940