Ⅰ python爬虫怎么获取下一页的URL和网页内容
用浏览器调试工具,如firebug,查看点击下一页时的http请求,再用python模拟就行了。
Ⅱ 如何评价利用python制作数据采集,计算,可视化界面呢
先来设置两个url地址,第一个用于第一次访问,这样可以获得网站服务器发来的cookie,第二个网址是用于登陆的地址
引入两个模块,cookielib和urllib2
接着,我们安装一个cookie处理器,代码如下,这个代码很多人不太能读懂,其实你会用就可以了,他们就是这个固定的形式,顶多改改变量的名字。你复制下来以后自己用就可以了,用多了,你再去看代码的意义,你就都懂了。
然后我们先访问一下网站,获得一个cookie,你不用管这个cookie该怎么弄,前面设置的cookie处理器会自动处理。
接着,我们写一下postdata,也就是你要post的数据,因为我们打算登陆网站,所以postdata里肯定有用户名和密码,那么怎么知道该怎么写postdata呢?看你抓包得到的post数据。下面第一幅图是httpwatch抓包截图,点击postdata,看到post的数据,然后我们看第二幅图,就是python的写法。你自己感受一下。
写完postdata以后,我们 要将postdata转码一下,让服务器可以解读postdata数据
接着设置headers信息,headers也是抓包得到的。同样的方式,你去写header内的信息
然后我们通过request方法来登陆网站,并返回数据,返回的数据存储在request中
通过rulopen方法和read方法来读取数据,并打印出来。
我们看到输出的结果,这说明我们虽然正确的模拟了登陆网站需要的post信息,但是没有考虑到登陆网站是需要验证码的,后期我们会看到如何处理验证码,如果你拿这个教程去处理没有验证码的登陆问题,那么你现在已经成功了。
Ⅲ 如何用Python写一个抓取url不变网页的爬虫
兄弟,你有去试着写过一个爬虫吗?那我来教你好了。
我点开了你给我的网址,点了你所说的《进口分贸易商明细》,看他的url并没有改变是嘛? 0 0 我k 为什么,这么诡异,那我们用chrome 按下F12看看他到底搞了什么鬼 ,如下图:
奥,原来他这是一个内嵌页面。我们把这条url在另一个tab里面打开看看。
诶,貌似跟普通网页没什么区别了嘛?看看源代码,这些数据是不是js写进去的,貌似也不是啊,都是扎扎实实的数据在整个html里面。
那题主这些数据的采集你总会了吧。
不不不,那个翻页 url不是还没改变嘛????
那你再按下F12 看看我翻页又请求了什么??
搜嘎,原来如此,那以后只用对这个action 去post 这个data就可以实现翻页了嘛,很简单嘛。
那你怎么做就看你的咯~
Ⅳ python多线程探测url地址
建立一个名为url.txt的文件,将需要批量测试的url放此文件中,执行脚本就看可以了。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。
Ⅳ 想请问python大神一个问题。 我想用python通过外链爬取网站主页url.就好比
我进某个网址 我是记得地址的 但是我不会直接打地址进去 我会用网络搜索进去 我进网络也一样 用其它搜索网站搜网络然后进去。
Ⅵ 如何用最简单的Python爬虫采集整个网站
在之前的文章中Python实现“维基网络六度分隔理论“之基础爬虫,我们实现了在一个网站上随机地从一个链接到另一个链接,但是,如果我们需要系统地把整个网站按目录分类,或者要搜索网站上的每一个页面,我们该怎么办?我们需要采集整个网站,但是那是一种非常耗费内存资源的过程,尤其是处理大型网站时,比较合适的工具就是用一个数据库来存储采集的资源,之前也说过。下面来说一下怎么做。
网站地图sitemap
网站地图,又称站点地图,它就是一个页面,上面放置了网站上需要搜索引擎抓取的所有页面的链接(注:不是所有页面,一般来说是所有文章链接。大多数人在网站上找不到自己所需要的信息时,可能会将网站地图作为一种补救措施。搜索引擎蜘蛛非常喜欢网站地图。
对于SEO,网站地图的好处:
1.为搜索引擎蜘蛛提供可以浏览整个网站的链接简单的体现出网站的整体框架出来给搜索引擎看;
2.为搜索引擎蜘蛛提供一些链接,指向动态页面或者采用其他方法比较难以到达的页面;
3.作为一种潜在的着陆页面,可以为搜索流量进行优化;
4.如果访问者试图访问网站所在域内并不存在的URL,那么这个访问者就会被转到“无法找到文件”的错误页面,而网站地图可以作为该页面的“准”内容。
数据采集
采集网站数据并不难,但是需要爬虫有足够的深度。我们创建一个爬虫,递归地遍历每个网站,只收集那些网站页面上的数据。一般的比较费时间的网站采集方法从顶级页面开始(一般是网站主页),然后搜索页面上的所有链接,形成列表,再去采集到的这些链接页面,继续采集每个页面的链接形成新的列表,重复执行。
很明显,这是一个复杂度增长很快的过程。加入每个页面有10个链接,网站上有5个页面深度,如果采集整个网站,一共得采集的网页数量是105,即100000个页面。
因为网站的内链有很多都是重复的,所以为了避免重复采集,必须链接去重,在Python中,去重最常用的方法就是使用自带的set集合方法。只有“新”链接才会被采集。看一下代码实例:
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport repages = set()def getLinks(pageurl):globalpageshtml= urlopen("" + pageurl)soup= BeautifulSoup(html)forlink in soup.findAll("a", href=re.compile("^(/wiki/)")):if'href' in link.attrs:iflink.attrs['href'] not in pages:#这是新页面newPage= link.attrs['href']print(newPage)pages.add(newPage)getLinks(newPage)getLinks("")
原理说明:程序执行时,用函数处理一个空URL,其实就是维基网络的主页,然后遍历首页上每个链接,并检查是否已经在全局变量集合pages里面,如果不在,就打印并添加到pages集合,然后递归处理这个链接。
递归警告:Python默认的递归限制是1000次,因为维基网络的链接浩如烟海,所以这个程序达到递归限制后就会停止。如果你不想让它停止,你可以设置一个递归计数器或者其他方法。
采集整个网站数据
为了有效使用爬虫,在用爬虫的时候我们需要在页面上做一些事情。我们来创建一个爬虫来收集页面标题、正文的第一个段落,以及编辑页面的链接(如果有的话)这些信息。
第一步,我们需要先观察网站上的页面,然后制定采集模式,通过F12(一般情况下)审查元素,即可看到页面组成。
观察维基网络页面,包括词条和非词条页面,比如隐私策略之类的页面,可以得出下面的规则:
所有的标题都是在h1→span标签里,而且页面上只有一个h1标签。
所有的正文文字都在div#bodyContent标签里,如果我们想获取第一段文字,可以用div#mw-content-text→p,除了文件页面,这个规则对所有页面都适用。
编辑链接只出现在词条页面上,如果有编辑链接,都位于li#ca-edit标签的li#ca-edit→span→a里面。
调整一下之前的代码,我们可以建立一个爬虫和数据采集的组合程序,代码如下:
import redef getLinks(pageUrl):global pageshtml = urlopen("" + pageUrl)soup = BeautifulSoup(html)try:print(soup.h1.get_text())print(soup.find(id="mw-content-text").findAll("p")[0])print(soup.find(id="ca-edit").find("span").find("a").attrs['href'])except AttributeError:print("页面缺少属性")for link in soup.findAll("a", href =re.compile("^(/wiki/)")):if 'href' in link.attrs:#这是新页面newPage = link.attrs['href']print("------------------\n"+newPage)
这个for循环和原来的采集程序基本上是一样的,因为不能确定每一页上都有所有类型的数据,所以每个打印语句都是按照数据在页面上出现的可能性从高到低排列的。
数据存储到MySQL
前面已经获取了数据,直接打印出来,查看比较麻烦,所以我们就直接存到MySQL里面吧,这里只存链接没有意义,所以我们就存储页面的标题和内容。前面我有两篇文章已经介绍过如何存储数据到MySQL,数据表是pages,这里直接给出代码:
import reimport datetimeimport randomimport pymysqlconn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', passwd = '19930319', db = 'wiki', charset ='utf8mb4')cur = conn.cursor()cur.execute("USE wiki")#随机数种子random.seed(datetime.datetime.now())#数据存储def store(title, content):cur.execute("INSERT INTO pages(title, content)VALUES(\"%s\", \"%s\")", (title, content))cur.connection.commit()def getLinks(articleUrl):html = urlopen("" + articleUrl)title = soup.find("h1").get_text()content =soup.find("div",{"id":"mw-content-text"}).find("p").get_text()store(title, content)returnsoup.find("div",{"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$"))#设置第一页links =getLinks("/wiki/Kevin_Bacon")try:while len(links)>0:newArticle = links[random.randint(0, len(links)-1)].attrs['href']print (newArticle)links = getLinks(newArticle)finally:cur.close()conn.close()
小结
今天主要讲一下Python中遍历采集一个网站的链接,方便下面的学习。
希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。
Ⅶ python scrapy 利用selenium模拟登录每个采集一个url都要打开浏览器,速度很慢,如何解决
零. 在用scrapy爬取数据中,有写是通过js返回的数据,如果我们每个都要获取,那就会相当麻烦,而且查看源码也看不到数据的,所以能不能像浏览器一样去操作他呢?
所以有了->
Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。使用 Selenium 和在浏览器中运行测试还有很多其他好处。
Ⅷ python如何批量抓取很多url的信息 求大佬 代码
可将很多url放在一个列表中,然后用循环语句遍历。代码如下:
urls=[url1,url2,url3]
for u in urls:
requests.get(u)
txt=r.text
Ⅸ 使用python采集网页内容时那登录那个网站,否则采集不了!请问怎么实现python登录后采集网页
有些网页需要你登录之后才可以访问,你需要提供账户和密码。
只要在发送http请求时,带上含有正常登陆的cookie就可以了。
1.首先我们要先了解cookie的工作原理。
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。
2.之后我们要获取到用户正常登录的cookie.
python提供了cookieJar的库,只要把cookieJar的实例作为参数传到urllib2的一个opener里面。
然后访问一次登录的页面,cookie就已经保存下来了。之后通过这个实例访问所有的页面都带有正常登陆的cookie了。
以人人网为例子。
#encoding=utf-8
import urllib2
import urllib
import cookielib
def renrenBrower(url,user,password):
#登陆页面,可以通过抓包工具分析获得,如fiddler,wireshark
login_page = "http://www.renren.com/PLogin.do"
try:
#获得一个cookieJar实例
cj = cookielib.CookieJar()
#cookieJar作为参数,获得一个opener的实例
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#伪装成一个正常的浏览器,避免有些web服务器拒绝访问。
opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')]
#生成Post数据,含有登陆用户名密码。
data = urllib.urlencode({"email":user,"password":password})
#以post的方法访问登陆页面,访问之后cookieJar会自定保存cookie
opener.open(login_page,data)
#以带cookie的方式访问页面
op=opener.open(url)
#读取页面源码
data= op.read()
return data
except Exception,e:
print str(e)
#访问某用户的个人主页,其实这已经实现了人人网的签到功能。
print renrenBrower("http://www.renren.com/home","用户名","密码")
Ⅹ BAE Python 如何获取 url
使用urllib.parse.urlparse(url).hostname获取域名,通过socket.gethostbyname(域名)获取IP地址,再通过socket.gethostbyaddr(ip地址就可以得到)真实的hostname了。代码示例python3.x:import urllib.parseimport socketurl = '你要获取的网址'ym = urllib.parse.urlparse(url).hostnameprint(ym)ip = socket.gethostbyname(ym)print(ip)hn = socket.gethostbyaddr(ip)print(hn[0])效果: