python 简单的爬取代码案例
python爬虫——豆瓣电影TOP250数据

python爬⾍——⾖瓣电影TOP250数据这次以⾖瓣电影TOP250⽹为例编写⼀个爬⾍程序,并将爬取到的数据(排名、电影名和电影海报⽹址)存⼊MySQL数据库中。
下⾯是完整代码:Ps:在执⾏程序前,先在MySQL中创建⼀个数据库"pachong"。
import pymysqlimport requestsimport re#获取资源并下载def resp(listURL):#连接数据库conn = pymysql.connect(host = '127.0.0.1',port = 3306,user = 'root',password = '******', #数据库密码请根据⾃⾝实际密码输⼊database = 'pachong',charset = 'utf8')#创建数据库游标cursor = conn.cursor()#创建列表t_movieTOP250(执⾏sql语句)cursor.execute('create table t_movieTOP250(id INT PRIMARY KEY auto_increment NOT NULL ,movieName VARCHAR(20) NOT NULL ,pictrue_address VARCHAR(100))') try:# 爬取数据for urlPath in listURL:# 获取⽹页源代码response = requests.get(urlPath)html = response.text# 正则表达式namePat = r'alt="(.*?)" src='imgPat = r'src="(.*?)" class='# 匹配正则(排名【⽤数据库中id代替,⾃动⽣成及排序】、电影名、电影海报(图⽚地址))res2 = pile(namePat)res3 = pile(imgPat)textList2 = res2.findall(html)textList3 = res3.findall(html)# 遍历列表中元素,并将数据存⼊数据库for i in range(len(textList3)):cursor.execute('insert into t_movieTOP250(movieName,pictrue_address) VALUES("%s","%s")' % (textList2[i],textList3[i]))#从游标中获取结果cursor.fetchall()#提交结果mit()print("结果已提交")except Exception as e:#数据回滚conn.rollback()print("数据已回滚")#关闭数据库conn.close()#top250所有⽹页⽹址def page(url):urlList = []for i in range(10):num = str(25*i)pagePat = r'?start=' + num + '&filter='urL = url+pagePaturlList.append(urL)return urlListif __name__ == '__main__':url = r"https:///top250"listURL = page(url)resp(listURL)结果如下图:以上就是我的分享,如果有什么不⾜之处请指出,多交流,谢谢!想获取更多数据或定制爬⾍的请点击。
用Python实现网络爬虫、蜘蛛

python 中如何提取网页正文啊谢谢import urllib.requesturl="http://google./"response=urllib.request.urlopen(url)page=response.read()python提取网页中的文本1.import os,sys,datetime2.import httplib,urllib, re3.from sgmllib import SGMLParser4.5.import types6.7.class Html2txt(SGMLParser):8.def reset(self):9.self.text = ''10. self.inbody = True11. SGMLParser.reset(self)12. def handle_data(self,text):13. if self.inbody:14. self.text += text15.16. def start_head(self,text):17. self.inbody = False18. def end_head(self):19. self.inbody = True20.21.22.if __name__ == "__main__":23. parser = Html2txt()24. parser.feed(urllib.urlopen("").read())25. parser.close()26. print parser.text.strip()python 下载网页import httplibconn=httplib.HTTPConnection(".baidu.")conn.request("GET","/index.html")r1=conn.getresponse()print r1.status,r1.reasondata=r1.read()print dataconn.close用python下载网页,超级简单!from urllib import urlopenwebdata = urlopen("").read()print webdata深入python里面有python 下载网页内容,用python的pycurl模块实现1.用python 下载网页内容还是很不错的,之前是使用urllib模块实验的,但听说有pycurl这个模块,而且比urllib好,所以尝试下,废话不说,以下是代码2.3.4.#!/usr/bin/env python5.# -*- coding: utf-8 -*-6.import StringIO7.import pycurl8.9.def writefile(fstr,xfilename):f=open(xfilename,'w')f.write(fstr)f.close10.1.html = StringIO.StringIO()2.c = pycurl.Curl()3.myurl='http://.ppgchenshan.'4.5.c.setopt(pycurl.URL, myurl)6.7.#写的回调8.c.setopt(pycurl.WRITEFUNCTION, html.write) 9.10. c.setopt(pycurl.FOLLOWLOCATION, 1)11.12.#最大重定向次数,可以预防重定向陷阱13. c.setopt(pycurl.MAXREDIRS, 5)14.15.#连接超时设置16. c.setopt(pycurl.CONNECTTIMEOUT, 60)17. c.setopt(pycurl.TIMEOUT, 300)18.19.#模拟浏览器20. c.setopt(ERAGENT, "Mozilla/4.0 (patible;MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)")21.22.23.24.#访问,阻塞到访问结束25. c.perform()26.27.#打印出 200(HTTP状态码,可以不需要)28.print c.getinfo(pycurl.HTTP_CODE)29.30.#输出网页的内容31.print html.getvalue()32.#保存成down.txt文件33.writefile(html.getvalue(),"down.txt")python的pycurl模块的安装可以到/download/这里去找.不同系统使用不同版本,自己看看总结下,Python 下载网页的几种方法1fd = urllib2.urlopen(url_link)data = fd.read()这是最简洁的一种,当然也是Get的方法2通过GET的方法def GetHtmlSource(url):try:htmSource = ''req = urllib2.Request(url)fd = urllib2.urlopen(req,"")while 1:data = fd.read(1024)if not len(data):breakhtmSource += datafd.close()del fddel reqhtmSource = htmSource.decode('cp936')htmSource = formatStr(htmSource)return htmSourceexcept socket.error, err:str_err = "%s" % errreturn ""3通过GET的方法def GetHtmlSource_Get(htmurl):htmSource = ""try:urlx = httplib.urlsplit(htmurl)conn = httplib.HTTPConnection(loc)conn.connect()conn.putrequest("GET", htmurl, None)conn.putheader("Content-Length", 0)conn.putheader("Connection", "close")conn.endheaders()res = conn.getresponse()htmSource = res.read()except Exception(), err:trackback.print_exec()conn.close()return htmSource通过POST的方法def GetHtmlSource_Post(getString):htmSource = ""try:url = httplib.urlsplit(".:8080")conn = httplib.HTTPConnection(loc)conn.connect()conn.putrequest("POST", "/sipo/zljs/hyjs-jieguo.jsp")conn.putheader("Content-Length", len(getString))conn.putheader("Content-Type", "application/x--form-urlencoded")conn.putheader("Connection", " Keep-Alive")conn.endheaders()conn.send(getString)f = conn.getresponse()if not f:raise socket.error, "timed out"htmSource = f.read()f.close()conn.close()return htmSourceexcept Exception(), err:trackback.print_exec()conn.close()return htmSource本文来自CSDN博客,转载请标明出处:/sding/archive/2010/04/29/5538065.aspxDjango+python+BeautifulSoup组合的垂直搜索爬虫使用python+BeautifulSoup完成爬虫抓取特定数据的工作,并使用Django搭建一个管理平台,用来协调抓取工作。
初次尝试python爬虫,爬取小说网站的小说。

初次尝试python爬⾍,爬取⼩说⽹站的⼩说。
本次是⼩阿鹏,第⼀次通过python爬⾍去爬⼀个⼩说⽹站的⼩说。
下⾯直接上菜。
1.⾸先我需要导⼊相应的包,这⾥我采⽤了第三⽅模块的架包,requests。
requests是python实现的简单易⽤的HTTP 库,使⽤起来⽐urllib简洁很多,因为是第三⽅库,所以使⽤前需要cmd安装。
cmd安装⽅式,打开cmd,输⼊以下命令: pip install requests 3.我们现在有了⼩说的链接,这时候就要模拟浏览器发送http的请求: response=requests.get(url)response.encoding='gbk' 4.我们可以尝试获取⽬标⼩说的⽹页源码 html=response.text 我们把它打印出来看下: 有html基础的朋友应该对这些很熟悉。
通过打印我们可以看见⼩说的名字,作者,以及⼩说章节的url。
这时候我们就先通过HTML⽹页源码获取⼩说的名字:title=re.findall(r'<meta property="og:novel:book_name" content="(.*?)"/>',html)[0] 从上⾯的代码我们可以看见是通过正则表达式去匹配的,对正则表达式有疑问的同学可以⾃⾏百度下。
当然不同⽹站的具体⼩说名字可能会放在不同的标签⾥,需要我们打开⽹页源码去看看下。
5.这时候我们也就新建⼀个⽂本⽂件来保存⼩说内容。
fb=open('%s.txt'% title,'w',encoding='utf-8') 这时候我们需要获取⼩说的章节⽬录对应的url,我们还是来观察下⽹页的源码。
我们通过⽕狐浏览器的f12看下⽹页可发现: ⼩说的章节⽬标都在标签<div id='list'>⾥我们通过下⾯的代码获取对应的章节名和url。
python爬取微信小程序(实战篇)

python爬取微信⼩程序(实战篇)python爬取微信⼩程序(实战篇)本⽂链接:⼀、背景介绍近期有需求需要抓取微信⼩程序中的数据分析,与⼀般的⽹页爬⾍类似,主要⽬标是获取主要的URL地址进⾏数据爬取,⽽问题的关键在于如何获取移动端request请求后https加密的参数。
本⽂从最初的抓包到获取URL、解析参数、数据分析及⼊库等,⼀步步进⾏微信⼩程序的数据爬取。
此次爬取的⽬标是微信⼩程序“财神股票”中的已受理科创版公司名单数据,如下:注:抓包、分析、爬取等全过程⼏乎通⽤于微信⼩程序,可以类似的爬取其他⼩程序测试,原理⼤同⼩异。
⼆、环境配置具体的环境配置参考:移动端:iPhone;PC端:Windows 10;软件:Charles注:⽹络要求较⾼,请确保⽹络访问⽆限制。
三、Charles抓包Charles相关的配置与说明在此前的⼀篇⽂章()中有详细说明,此间不再赘述,强调⼀点就是移动端证书确保始终信任状态:1. 设置移动端⽹络代理;2. 打开Charles,关闭Windows proxy;3. 打开微信⼩程序,Charles提⽰如下说明正常连接:4. 点击微信⼩程序后,在Charles中显⽰如下:5. 为了避免过度链接⼲扰,点击清除按键,清理后,点击“科创版专题”,Charles抓取链接如下:6. 点击,在右端contents中可以看到请求的详细内容(为什么是这个链接⽽不是别的?我也是⼀个个点开尝试的…)。
7. 在右侧的overview中,可以看到URL的value:看到这个链接有⽊有很熟悉的感觉呢?Method对应的值是GET,也就是说此链接是通过GET⽅法进⾏获取与展⽰数据,在主链接后采⽤key与value拼接的⽅式发送请求,最后两个参数pageIndex=1与pageSize=5,对应第⼀个页⾯展⽰的5条数据,在Charles右侧的contents中,下⽅选择JSON Text,可以看到对应返回的response如下:此处的 ”count”: 110 对应⽬前共有110条与科创版公司相关的数据。
Python网络爬虫实践爬取地理位置数据

Python网络爬虫实践爬取地理位置数据网络爬虫是一种自动化程序,可以在互联网上收集和提取数据。
Python是一种广泛使用的编程语言,在网络爬虫开发中,它具有便捷的库和工具,能够帮助开发者快速地实现爬取数据的需求。
本文将介绍如何使用Python网络爬虫实践爬取地理位置数据。
一、概述地理位置数据是指记录了地理坐标、位置信息等内容的数据。
在许多应用场景中,如地图软件、导航系统、天气预报等,都需要使用地理位置数据。
而互联网上存在大量的地理位置数据,通过网络爬虫可以帮助我们获取这些数据,并进行进一步的分析和应用。
二、爬取目标网站选择在进行网络爬虫实践时,首先需要选择合适的目标网站。
对于地理位置数据的爬取,我们可以选择包含相应信息的网站,如地图网站、位置服务网站等。
在选择目标网站时,需要考虑网站的数据质量、数据量、访问限制等因素。
三、分析目标网站结构在爬取地理位置数据之前,我们需要先了解目标网站的结构。
通过查看网站的源代码,可以获取网站页面的HTML结构。
在这个过程中,可以使用浏览器的开发者工具来查看网页元素、网络请求等信息。
四、使用Python爬虫库Python拥有丰富的网络爬虫库,如BeautifulSoup、Scrapy、Requests等,这些库可以帮助我们进行网页解析、HTTP请求、数据提取等操作。
在选择使用的爬虫库时,可以根据自己的实际需求和熟悉程度来进行选择。
五、编写爬虫代码在获取目标网站的结构和选择好爬虫库之后,可以开始编写爬虫代码了。
首先,需要进行HTTP请求,获取网页的HTML代码。
然后,使用爬虫库对HTML代码进行解析,提取需要的地理位置数据。
最后,可以将爬取的数据保存到本地文件或数据库中,以备后续的分析和应用。
六、数据处理和分析爬取到地理位置数据后,可以进行进一步的数据处理和分析。
可以使用Python的数据处理库,如Pandas、NumPy等,对数据进行清洗、整理、转换等操作。
根据具体的需求,还可以进行数据可视化、统计分析、机器学习等工作,来挖掘数据的潜在价值。
怎么用Python爬取抖音小视频?资深程序员都这样爬取的(附源码)

怎么⽤Python爬取抖⾳⼩视频?资深程序员都这样爬取的(附源码)简介抖⾳,是⼀款可以拍短视频的⾳乐创意短视频社交软件,该软件于2016年9⽉上线,是⼀个专注年轻⼈的15秒⾳乐短视频社区。
⽤户可以通过这款软件选择歌曲,拍摄15秒的⾳乐短视频,形成⾃⼰的作品。
此APP已在Android各⼤应⽤商店和APP Store均有上线。
今天咱们就⽤Python爬取抖⾳视频准备:环境:Python3.6+WindowsIDE:你开⾏就好,喜欢⽤哪个就⽤哪个模块:1from splinter.driver.webdriver.chrome import Options, Chrome2from splinter.browser import Browser3from contextlib import closing4 import requests, json, time, re, os, sys, time5from bs4 import BeautifulSoup获得视频播放地址查询的⽤户ID视频名字列表视频链接列表⽤户昵称1 def get_video_urls(self, user_id):23 + video_names = []4 + video_urls = []5 + unique_id = ''6 + while unique_id != user_id:7 + search_url = 'https:///aweme/v1/discover/search/?cursor=0&keyword=%s&count=10&type=1&retry_type=no_retry&iid=17900846586&device_id=34692364855&ac=wifi&channel=xiaomi&aid=1128&app_name=aweme&8 + req = requests.get(url = search_url, verify = False)9 + html = json.loads(req.text)10 + aweme_count = html['user_list'][0]['user_info']['aweme_count']11 + uid = html['user_list'][0]['user_info']['uid']12 + nickname = html['user_list'][0]['user_info']['nickname']13 + unique_id = html['user_list'][0]['user_info']['unique_id']14 + user_url = 'https:///aweme/v1/aweme/post/?user_id=%s&max_cursor=0&count=%s' % (uid, aweme_count)15 + req = requests.get(url = user_url, verify = False)16 + html = json.loads(req.text)17 + i = 118 + for each in html['aweme_list']:19 + share_desc = each['share_info']['share_desc']20 + if'抖⾳-原创⾳乐短视频社区' == share_desc:21 + video_names.append(str(i) + '.mp4')22 + i += 123 + else:24 + video_names.append(share_desc + '.mp4')25 + video_urls.append(each['share_info']['share_url'])26 +27 + return video_names, video_urls, nickname获得带⽔印的视频播放地址video_url:带⽔印的视频播放地址download_url: 带⽔印的视频下载地址1 def get_download_url(self, video_url):23 + req = requests.get(url = video_url, verify = False)4 + bf = BeautifulSoup(req.text, 'lxml')5 + script = bf.find_all('script')[-1]6 + video_url_js = re.findall('var data = \[(.+)\];', str(script))[0]7 + video_html = json.loads(video_url_js)8 + download_url = video_html['video']['play_addr']['url_list'][0]9 + return download_url视频下载video_url: 带⽔印的视频地址video_name: 视频名watermark_flag: 是否下载不带⽔印的视频1 def video_downloader(self, video_url, video_name, watermark_flag=True):2 + """3 + 视频下载4 + Parameters:5 + video_url: 带⽔印的视频地址6 + video_name: 视频名7 + watermark_flag: 是否下载不带⽔印的视频8 + Returns:9 + ⽆10 + """11 + size = 012 + if watermark_flag == True:13 + video_url = self.remove_watermark(video_url)14 + else:15 + video_url = self.get_download_url(video_url)16 + with closing(requests.get(video_url, stream=True, verify = False)) as response:17 + chunk_size = 102418 + content_size = int(response.headers['content-length'])19 + if response.status_code == 200:20 + sys.stdout.write(' [⽂件⼤⼩]:%0.2f MB\n' % (content_size / chunk_size / 1024))21 +22 + with open(video_name, "wb") as file:23 + for data in response.iter_content(chunk_size = chunk_size):24 + file.write(data)25 + size += len(data)26 + file.flush()27 +28 + sys.stdout.write(' [下载进度]:%.2f%%' % float(size / content_size * 100) + '\r')29 + sys.stdout.flush()获得⽆⽔印的视频播放地址1def remove_watermark(self, video_url):2 + """3+ 获得⽆⽔印的视频播放地址4+ Parameters:5+ video_url: 带⽔印的视频地址6+ Returns:7+ ⽆⽔印的视频下载地址8+ """9 + self.driver.visit('/')10 + self.driver.find_by_tag('input').fill(video_url)11 + self.driver.find_by_xpath('//button[@class="btn btn-default"]').click()12 + html = self.driver.find_by_xpath('//div[@class="thumbnail"]/div/p')[0].html13 + bf = BeautifulSoup(html, 'lxml')14 + return bf.find('a').get('href')下载视频1def run(self):2 + """3+ 运⾏函数4+ Parameters:5+ None6+ Returns:7+ None8+ """9 + self.hello()10 + user_id = input('请输⼊ID(例如40103580):')11 + video_names, video_urls, nickname = self.get_video_urls(user_id)12 + if nickname not in os.listdir():13 + os.mkdir(nickname)14 + print('视频下载中:共有%d个作品!\n' % len(video_urls))15 + for num in range(len(video_urls)):16 + print(' 解析第%d个视频链接 [%s] 中,请稍后!\n' % (num+1, video_urls[num]))17 + if'\\'in video_names[num]:18 + video_name = video_names[num].replace('\\', '')19 + elif'/'in video_names[num]:20 + video_name = video_names[num].replace('/', '')21 + else:22 + video_name = video_names[num]23 + self.video_downloader(video_urls[num], os.path.join(nickname, video_name))24 + print('\n')25 +26 + print('下载完成!')全部代码1 +# -*- coding:utf-8 -*-23 +Python学习交流群:1252409634 +Python学习交流群:1252409635 +Python学习交流群:12524096367 +from splinter.driver.webdriver.chrome import Options, Chrome8 +from splinter.browser import Browser9 +from contextlib import closing10 +import requests, json, time, re, os, sys, time11 +from bs4 import BeautifulSoup12 +13class DouYin(object):14def__init__(self, width = 500, height = 300):15 + """16+ 抖⾳App视频下载17+ """18 + # ⽆头浏览器19 + chrome_options = Options()20 + chrome_options.add_argument('user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"')21 + self.driver = Browser(driver_name='chrome', executable_path='D:/chromedriver', options=chrome_options, headless=True)22 +23def get_video_urls(self, user_id):24 + """25+ 获得视频播放地址26+ Parameters:27+ user_id:查询的⽤户ID28+ Returns:29+ video_names: 视频名字列表30+ video_urls: 视频链接列表31+ nickname: ⽤户昵称32+ """33 + video_names = []34 + video_urls = []35 + unique_id = ''36 + while unique_id != user_id:37 + search_url = 'https:///aweme/v1/discover/search/?cursor=0&keyword=%s&count=10&type=1&retry_type=no_retry&iid=17900846586&device_id=34692364855&ac=wifi&channel=xiaomi&aid=1128&app_name=aweme38 + req = requests.get(url = search_url, verify = False)39 + html = json.loads(req.text)40 + aweme_count = html['user_list'][0]['user_info']['aweme_count']41 + uid = html['user_list'][0]['user_info']['uid']42 + nickname = html['user_list'][0]['user_info']['nickname']43 + unique_id = html['user_list'][0]['user_info']['unique_id']44 + user_url = 'https:///aweme/v1/aweme/post/?user_id=%s&max_cursor=0&count=%s' % (uid, aweme_count)45 + req = requests.get(url = user_url, verify = False)46 + html = json.loads(req.text)47 + i = 148 + for each in html['aweme_list']:49 + share_desc = each['share_info']['share_desc']50 + if'抖⾳-原创⾳乐短视频社区' == share_desc:51 + video_names.append(str(i) + '.mp4')52 + i += 153 + else:54 + video_names.append(share_desc + '.mp4')55 + video_urls.append(each['share_info']['share_url'])56 +57 + return video_names, video_urls, nickname58 +59def get_download_url(self, video_url):60 + """61+ 获得带⽔印的视频播放地址62+ Parameters:63+ video_url:带⽔印的视频播放地址64+ Returns:65+ download_url: 带⽔印的视频下载地址66+ """67 + req = requests.get(url = video_url, verify = False)68 + bf = BeautifulSoup(req.text, 'lxml')69 + script = bf.find_all('script')[-1]70 + video_url_js = re.findall('var data = \[(.+)\];', str(script))[0]71 + video_html = json.loads(video_url_js)72 + download_url = video_html['video']['play_addr']['url_list'][0]73 + return download_url74 +75def video_downloader(self, video_url, video_name, watermark_flag=True):76 + """77+ 视频下载78+ Parameters:79+ video_url: 带⽔印的视频地址80+ video_name: 视频名81+ watermark_flag: 是否下载不带⽔印的视频82+ Returns:83+ ⽆84+ """85 + size = 086 + if watermark_flag == True:87 + video_url = self.remove_watermark(video_url)88 + else:89 + video_url = self.get_download_url(video_url)90 + with closing(requests.get(video_url, stream=True, verify = False)) as response:91 + chunk_size = 102492 + content_size = int(response.headers['content-length'])93 + if response.status_code == 200:94 + sys.stdout.write(' [⽂件⼤⼩]:%0.2f MB\n' % (content_size / chunk_size / 1024))95 +96 + with open(video_name, "wb") as file:97 + for data in response.iter_content(chunk_size = chunk_size):98 + file.write(data)99 + size += len(data)100 + file.flush()101 +102 + sys.stdout.write(' [下载进度]:%.2f%%' % float(size / content_size * 100) + '\r') 103 + sys.stdout.flush()104 +105 +106def remove_watermark(self, video_url):107 + """108+ 获得⽆⽔印的视频播放地址109+ Parameters:110+ video_url: 带⽔印的视频地址111+ Returns:112+ ⽆⽔印的视频下载地址113+ """114 + self.driver.visit('/')115 + self.driver.find_by_tag('input').fill(video_url)116 + self.driver.find_by_xpath('//button[@class="btn btn-default"]').click()117 + html = self.driver.find_by_xpath('//div[@class="thumbnail"]/div/p')[0].html118 + bf = BeautifulSoup(html, 'lxml')119 + return bf.find('a').get('href')120 +121def run(self):122 + """123+ 运⾏函数124+ Parameters:125+ None126+ Returns:127+ None128+ """129 + self.hello()130 + user_id = input('请输⼊ID(例如40103580):')131 + video_names, video_urls, nickname = self.get_video_urls(user_id)132 + if nickname not in os.listdir():133 + os.mkdir(nickname)134 + print('视频下载中:共有%d个作品!\n' % len(video_urls))135 + for num in range(len(video_urls)):136 + print(' 解析第%d个视频链接 [%s] 中,请稍后!\n' % (num+1, video_urls[num]))137 + if'\\'in video_names[num]:138 + video_name = video_names[num].replace('\\', '')139 + elif'/'in video_names[num]:140 + video_name = video_names[num].replace('/', '')141 + else:142 + video_name = video_names[num]143 + self.video_downloader(video_urls[num], os.path.join(nickname, video_name))144 + print('\n')145 +146 + print('下载完成!')147 +148def hello(self):149 + """150+ 打印欢迎界⾯151+ Parameters:152+ None153+ Returns:154+ None155+ """156 + print('*' * 100)157 + print('\t\t\t\t抖⾳App视频下载⼩助⼿')158 + print('\t\t作者:Python学习交流群:125240963')159 + print('*' * 100)160 +161 +162 +if__name__ == '__main__':163 + douyin = DouYin()164 + douyin.run()。
Python爬虫实现爬取百度百科词条功能实例

Python爬⾍实现爬取百度百科词条功能实例本⽂实例讲述了Python爬⾍实现爬取百度百科词条功能。
分享给⼤家供⼤家参考,具体如下:爬⾍是⼀个⾃动提取⽹页的程序,它为搜索引擎从万维⽹上下载⽹页,是搜索引擎的重要组成。
爬⾍从⼀个或若⼲初始⽹页的URL开始,获得初始⽹页上的URL,在抓取⽹页的过程中,不断从当前页⾯上抽取新的URL放⼊队列,直到满⾜系统的⼀定停⽌条件。
爬⾍的⼯作流程较为复杂,需要根据⼀定的⽹页分析算法过滤与主题⽆关的链接,保留有⽤的链接并将其放⼊等待抓取的URL队列。
然后,它将根据⼀定的搜索策略从队列中选择下⼀步要抓取的⽹页URL,并重复上述过程,直到达到系统的某⼀条件时停⽌。
另外,所有被爬⾍抓取的⽹页将会被系统存贮,进⾏⼀定的分析、过滤,并建⽴索引,以便之后的查询和检索。
常见的爬⾍框架有Scrapy等。
⾃定义爬⾍程序⼀般包含:URL管理器、⽹页下载器、⽹页解析器、输出处理器。
以下我写了⼀个爬取百度百科词条的实例。
爬⾍主程序⼊⼝from crawler_test.html_downloader import UrlDownLoaderfrom crawler_test.html_outer import HtmlOuterfrom crawler_test.html_parser import HtmlParserfrom crawler_test.url_manager import UrlManager# 爬⾍主程序⼊⼝class MainCrawler():def __init__(self):# 初始值,实例化四⼤处理器:url管理器,下载器,解析器,输出器self.urls = UrlManager()self.downloader = UrlDownLoader()self.parser = HtmlParser()self.outer = HtmlOuter()# 开始爬⾍⽅法def start_craw(self, main_url):print('爬⾍开始...')count = 1self.urls.add_new_url(main_url)while self.urls.has_new_url():try:new_url = self.urls.get_new_url()print('爬⾍%d,%s' % (count, new_url))html_cont = self.downloader.down_load(new_url)new_urls, new_data = self.parser.parse(new_url, html_cont)# 将解析出的url放⼊url管理器,解析出的数据放⼊输出器中self.urls.add_new_urls(new_urls)self.outer.conllect_data(new_data)if count >= 10:# 控制爬取的数量breakcount += 1except:print('爬⾍失败⼀条')self.outer.output()print('爬⾍结束。
Python爬虫爬取新浪微博内容示例【基于代理IP】

Python爬⾍爬取新浪微博内容⽰例【基于代理IP】本⽂实例讲述了Python爬⾍爬取新浪微博内容。
分享给⼤家供⼤家参考,具体如下:⼀般做爬⾍爬取⽹站,⾸选的都是m站,其次是wap站,最后考虑PC站。
当然,这不是绝对的,有的时候PC站的信息最全,⽽你⼜恰好需要全部的信息,那么PC站是你的⾸选。
⼀般m站都以m开头后接域名,所以本⽂开搞的⽹址就是 。
前期准备1.代理IP2.抓包分析通过抓包获取微博内容地址,这⾥不再细说,不明⽩的⼩伙伴可以⾃⾏百度查找相关资料,下⾯直接上完整的代码完整代码:# -*- coding: utf-8 -*-import urllib.requestimport json#定义要爬取的微博⼤V的微博IDid='1259110474'#设置代理IPproxy_addr="122.241.72.191:808"#定义页⾯打开函数def use_proxy(url,proxy_addr):req=urllib.request.Request(url)req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")proxy=urllib.request.ProxyHandler({'http':proxy_addr})opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)urllib.request.install_opener(opener)data=urllib.request.urlopen(req).read().decode('utf-8','ignore')return data#获取微博主页的containerid,爬取微博内容时需要此iddef get_containerid(url):data=use_proxy(url,proxy_addr)content=json.loads(data).get('data')for data in content.get('tabsInfo').get('tabs'):if(data.get('tab_type')=='weibo'):containerid=data.get('containerid')return containerid#获取微博⼤V账号的⽤户基本信息,如:微博昵称、微博地址、微博头像、关注⼈数、粉丝数、性别、等级等def get_userInfo(id):url='https:///api/container/getIndex?type=uid&value='+iddata=use_proxy(url,proxy_addr)content=json.loads(data).get('data')profile_image_url=content.get('userInfo').get('profile_image_url')description=content.get('userInfo').get('description')profile_url=content.get('userInfo').get('profile_url')verified=content.get('userInfo').get('verified')guanzhu=content.get('userInfo').get('follow_count')name=content.get('userInfo').get('screen_name')fensi=content.get('userInfo').get('followers_count')gender=content.get('userInfo').get('gender')urank=content.get('userInfo').get('urank')print("微博昵称:"+name+"\n"+"微博主页地址:"+profile_url+"\n"+"微博头像地址:"+profile_image_url+"\n"+"是否认证:"+str(verified)+"\n"+"微博说明:"+description+"\n"+"关注⼈数:"+str(guanzhu)+"\n"+"粉丝数:"+str(fensi)+"\n"+"性别:"+gender+"\n"+"微#获取微博内容信息,并保存到⽂本中,内容包括:每条微博的内容、微博详情页⾯地址、点赞数、评论数、转发数等def get_weibo(id,file):i=1while True:url='https:///api/container/getIndex?type=uid&value='+idweibo_url='https:///api/container/getIndex?type=uid&value='+id+'&containerid='+get_containerid(url)+'&page='+str(i)try:data=use_proxy(weibo_url,proxy_addr)content=json.loads(data).get('data')cards=content.get('cards')if(len(cards)>0):for j in range(len(cards)):print("-----正在爬取第"+str(i)+"页,第"+str(j)+"条微博------")card_type=cards[j].get('card_type')if(card_type==9):mblog=cards[j].get('mblog')attitudes_count=mblog.get('attitudes_count')comments_count=mblog.get('comments_count')created_at=mblog.get('created_at')reposts_count=mblog.get('reposts_count')scheme=cards[j].get('scheme')text=mblog.get('text')with open(file,'a',encoding='utf-8') as fh:fh.write("----第"+str(i)+"页,第"+str(j)+"条微博----"+"\n")fh.write("微博地址:"+str(scheme)+"\n"+"发布时间:"+str(created_at)+"\n"+"微博内容:"+text+"\n"+"点赞数:"+str(attitudes_count)+"\n"+"评论数:"+str(comments_count)+"\n"+"转发数:"+str(reposts_count)+"\n")i+=1else:breakexcept Exception as e:print(e)passif __name__=="__main__":file=id+".txt"get_userInfo(id)get_weibo(id,file)爬取结果更多关于Python相关内容可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Python程序设计有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python 简单的爬取代码案例
一、概述
如今,互联网信息的爆炸式增长使得数据获得变得更加容易,然而,想要获取有用的数据仍然需要依赖于网络爬虫。
Python是一种简单易学的编程语言,非常适合用来编写网络爬虫程序。
本文将介绍一些简单的Python爬取代码案例,帮助读者了解如何利用Python编写爬虫程序来获取网页上的信息。
二、Python爬取网页内容
在Python中,要编写一个简单的爬虫程序来获取网页上的信息,可以使用`requests`库来发送HTTP请求,并使用`beautiful soup`库来解析网页内容。
以下是一个简单的例子,演示了如何用Python来获取知识首页的内容。
```python
import requests
from bs4 import BeautifulSoup
url = 'xxx
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
titles = soup.find_all('h2', class_='ContentItem-title')
for title in titles:
print(title.text)
```
在这个例子中,我们首先使用`requests.get`方法向知识的首页发送了一个HTTP请求,然后使用`BeautifulSoup`库来解析返回的HTML内容,最后找到所有标题为`h2`的内容并将其打印出来。
这个例子非常简单,但已经涵盖了一个完整的网页爬取流程。
三、Python爬取图片
除了爬取文本信息,有时候我们还需要爬取网页上的图片。
在Python 中,可以使用`requests`库来下载图片。
以下是一个简单的例子,演示了如何用Python来爬取网页上的图片。
```python
import requests
url = 'xxx
response = requests.get(url)
with open('example.jpg', 'wb') as f:
f.write(response.content)
```
在这个例子中,我们使用`requests.get`方法向指定的URL发送了一
个HTTP请求,然后使用`open`方法以二进制写入模式打开一个文件,并将图片的二进制内容写入到这个文件中。
我们可以在本地磁盘上看
到下载下来的图片。
四、Python爬取动态页面
有时候,网页的内容是由JavaScript动态生成的,而不是直接以HTML形式返回的。
在这种情况下,我们就需要使用一个叫做
`Selenium`的库来模拟浏览器行为来获取网页内容。
以下是一个简单
的例子,演示了如何用Python来爬取一个动态生成的网页。
```python
from selenium import webdriver
url = 'xxx
driver = webdriver.Chrome()
driver.get(url)
titles = driver.find_elements_by_class_name('title')
for title in titles:
print(title.text)
driver.close()
```
在这个例子中,我们首先使用`webdriver.Chrome`方法来创建一个Chrome浏览器实例,然后使用`get`方法来向指定的URL发送一个HTTP请求。
我们使用`find_elements_by_class_name`方法来找到所有标题为`title`的元素,并将它们打印出来。
我们使用`close`方法关闭了浏览器实例。
五、总结
本文介绍了一些简单的Python爬取代码案例,其中涉及了爬取网页
内容、爬取图片以及爬取动态页面。
希望通过这些例子能够帮助读者
了解如何利用Python来写网络爬虫程序,并启发读者用Python来处理更加复杂的网络爬取任务。
Python网络爬虫相关的内容还有很多,读者可以继续深入学习,提高自己的爬虫技术水平。