python2.7 Anaconda2-5.0.1 pydev 4.5.5,pip19安装失败
python3.7 Anaconda2-5.0.1 pydev 4.5.5,pip19安装失败
//资源下载
Anaconda2-5.0.1-Windows-x86_64
下载地址---https://repo.anaconda.com/archive/
python-2.7.13.amd64.msi
python-2.7.13.msi
下载地址---https://www.python.org/downloads/release/python-2713/
pydev 4.5.5
下载地址---https://sourceforge.net/projects/pydev/files/pydev/PyDev%204.5.5/PyDev%204.5.5.zip/download
pip
下载--https://pypi.org/project/pip/19.0.3/#files
phantomjs
下载---http://wenku.kuryun.com/docs/phantomjs/download.html
https://phantomjs.org/download.html
Python介绍
概述
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载等,有益于增强源代码的复用性。
Python本身被设计为可扩充的,提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种"胶水语言"(gluelanguage)使用。使用Python将其他语言编写的程序进行集成和封装。
Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machi虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。
除此之外,Python还可以以交互模式运行,比如主流操作系统Unix/Linux、Mac、Windows都可以直接在命令模式下有Python交互环境。直接下达操作指令即可实现交互操作。
安装Anaconda
需要添加环境变量
D:\software\python\Anaconda2\Scripts
python安装
64位
python-2.7.13.amd64
需要添加环境变量
D:\software\python\python2.7
D:\software\python\python2.7\Scripts
cmd验证安装成功
C:\Users\16902>python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
使用IDE工具开发Python
1.将PyDev压缩包中的plugins和features目录下的jar包,拷贝到eclipse的plugins目录和features目录下
配置
新建项目
代码
#coding=utf-8
'''
知识点
1.三引号是多行注释
2.每行语句后不需要加;
3.如果在一行中写多条语句,需要用; 隔开
4.print 打印换行
5.print数据,打印不换行
6.python不需要声明变量类型,是根据结果来自动推断类型
7.查看类型的函数tvpe(变量)
8.python中标识符是区分大小写。比如a=100 A=100是两个不同的变量
abc=100Abc=100ABc=100
9.python中没有常量。都是变量
10.如果在开发中,发现标识符是大写,表示是一个常量,不希望被修改
11.python不是用{}来标识方法体作用域,而是通过缩进(Tab指标符控制)
12.如果标识符以双下滑线开头,比如__name 表示类的私有成员(private)
13.python中单引号等价于双引号,表示字符串
'''
print "hello python" ,;print "你好"
a=100
A=100
b="hello"
print type(a)
if a>100:
print "big"
else:
print "small"
s="helloword"
print s[0] #h
print s[0:3] #hel
print s[1:] #elloword
print "he" in s #True
str="my name id %s,my age %d" %("yy",2)
print str
print True and False
print True or False
print not True
#coding=utf-8
'''
知识点
1.python做类型转换,格式固定:目标格式(变量) 比如int(s)
2.python 导包通过import关键字 可以用as 为包起别名
'''
import math as m
from cmath import log10
import random
s="100"
i1=int(s)
f1=float(s)
print type(i1)
i2=-10
#返回绝对值
print abs(i2)
print m.exp(1)
print log10(100)
#计算x的n次方
print 2**10 #1024
#生成指定范围内的随机数字
print random.randint(1,5)
#类比于java的null 空值
x=None
#coding=utf-8
'''
知识点
1.列表用[门]声明
2.元组用()声明
3.列表和元组的操作都是通过下标操作[index],下标从0开始
4.Set用门,类比于java的Set
5.字典类型用{ key :value, key : value. . .}, 类比于Java的map
'''
#声明列表
l1=[1,2,3,"hello",2.1]
#列表取值
print l1
print l1[0]
print l1[0:4]
print l1[0:]
print len(l1)
print 2 in l1
l2=[3,1,2,5,4]
print max(l2)
print min(l2)
#reverse=false 是升序 , true是降序
l2.sort(cmp=None, key=None, reverse=False)
l2.sort(cmp=None, key=None, reverse=True)
print l2
l2.reverse()
print l2
l3=[("d",1),("b",3),("a",2),("c",4)]
#key传入lambda ,可以类比s.cala的匿名函数
l3.sort(cmp=None, key=lambda x:x[0], reverse=False)
print l3
s1={1,1,2,2,"hello"}
print s1
#申明字典类型
d1={"tom":18,"rose":25}
print d1["tom"]
print d1.get("tom")
#coding=utf-8
'''
知识点
1.通过def定义函数def函数名(参数列表):方法体
2.返回值必须加return关键字
3.参数不需要指定类型
4。如果要定义个空函数,方法体中需要用pass位
5.python支持Lamda表达式,可以类比于scaLa的匿名函数
所以可以将其进行赋值或传递
6.python函数支持默认参数机制,def函数名(形参=默认值)
7-python支持变长参数,def函数名(*形参)变长参数本质上可看做是列表
'''
l1=[1,2,3,4]
for i in l1:
print i
n=0
sum=0
while(n<=10):
sum+=n
n+=1
print sum
def f1(a,b):
return a+b
print f1(2,3)
print f1("hell","o")
def f2(a,b):
pass
print "hello"
f3=lambda a,b:a+b
print f3(2,3)
def f4(a,b=10):
return a+b
print f4(2)
#变长参数
def f5(*num):
#return max(num)
for i in num:
print i
#print f5(1,2,3,4)
f5(1,2,3,4)
以下安装配置失败
解压phantomjs
添加环境变量
D:\software\python\python2.7\phantomjs-2.1.1-windows\bin
D:\software\python\python2.7\pip-19.0.3>python setup.py install
D:\software\python\python2.7\pip-19.0.3>pip install pyspider
pip版本问题 默认Anaconda里边的pip版本,更新pip
在以下目录下运行pip install pyspider
d:\software\python\python2.7\lib\site-packages\
报错:Command “python setup.py egg_info” failed with error code 10 in c:\users\16902\appdata\local\temp\pip-install-a5b4_n\pycurl
解决 下载pycurl,放到d盘,安装
pip install D:\Downloads\pycurl-7.43.0.4-cp38-cp38-win_amd64.whl
pip install pycurl
报错:
Failed building wheel for wsgidav
Running setup.py clean for wsgidav
Failed to build wsgidav
Could not build wheels for wsgidav which use PEP 517 and cannot be installed directly
更新pip 和 setuptools
python -m pip install --upgrade pip
pip install --upgrade pip setuptools wheel
pip install wsgidav==2.4.1
pip install wheel
pip uninstall wsgidav
pip install wsgidav==2.4.1
pip install pyspider
pyspider all
报错
d:\software\python\python2.7\lib\site-packages\pyspider\libs\utils.py:196: FutureWarning: timeout is not supported on your platform.
warnings.warn("timeout is not supported on your platform.", FutureWarning)
phantomjs fetcher running on port 25555
[I 221004 20:43:18 result_worker:49] result_worker starting...
Exception in thread Thread-3:
Traceback (most recent call last):
File "d:\software\python\python2.7\lib\threading.py", line 801, in __bootstrap_inner
self.run()
#from urllib.parse import urlencode
python3.7
Collecting pycurl
Using cached pycurl-7.45.1.tar.gz (233 kB)
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 10
╰─> [1 lines of output]
Please specify --curl-dir=/path/to/built/libcurl
[end of output]
D:\software\python\pip-19.0.3>pip uninstall setuptools
D:\software\python\pip-19.0.3>pip install setuptools==57.5.0
ModuleNotFoundError: No module named 'distutils.command.bdist_msi'
sudo apt-get install python3-distutils
==================================
python爬虫软件安装配置失败,采用Java爬虫
================================
jsoup select
1.通过标签名来查找:测试代码︰
<span>33</span><span>25</span>
select写法:
Elements elements = document.select("spah");
⒉通过id来查找:
<span id="mySpan">36</span><span>20</span>
Elements elements = document.select("t#mySpan");
//通过id来查找,使用方法跟css指定元素一样,用#
3.通过class名来查找:
<span class="myClass">36</span><span>20</span>
Elements elements = document.select(".myClass");//使用方法跟css指定元素一样,用.
4.利用标签内属性名查找元素∶
<span class="class1" id="id1">36</span><span class="class2" id="id2">40</span>
Elements elements = document.select("span[class=class1]span[id=id1");//规则为标签名【属性名=属性值】,多个属性即多个【,如上
package com.cn;
import org.apache.log4j.Logger;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
public class TestDemo {
private Logger logger=Logger.getLogger(TestDemo.class);
@Test
public void connect() throws Exception{
String url="https://item.jd.com/10057361479634.html";
//根据url获取网页链接对象
Connection conn=Jsoup.connect(url);
//获取目标url的整个网页内容
Document doc=conn.get();
System.out.println(doc);
}
@Test
public void pare_title() throws Exception{
String url="https://item.jd.com/10057361479634.html";
//根据url获取网页链接对象
Connection conn=Jsoup.connect(url);
//获取目标url的整个网页内容
Document doc=conn.get();
// Element el=doc.select(".sku-name").get(0);
Element el=doc.select( "div[class=sku-name]" ).get(0);
System.out.println(el.text());
// //根据选择器返回结果集
// Elements els = doc.select(".sku-name");
// //遍历结果集
// for (Element el : els) {
// //获取每个结果中的文本内容
// String result=el.text();
// System.out.println(result);
// }
}
@Test
public void fetch_item_list() throws Exception{
String url="https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&wq=%E6%89%8B%E6%9C%BA&pvid=8858151673f941e9b1a4d2c7214b2b52";
//根据url获取网页链接对象
Connection conn=Jsoup.connect(url);
//获取目标url的整个网页内容
Document doc=conn.get();
Elements select = doc.select( ".p-name" );
for (Element el : select) {
System.out.println(el.text());
}
}
@Test
public void fetch_item_all() throws Exception{
String url="https://list.jd.com/list.html?tid=1008669";
//根据url获取网页链接对象
Connection conn=Jsoup.connect(url);
//获取目标url的整个网页内容
Document doc=conn.get();
Element el=doc.select(".p-skip em b").get(0);
int pageNum=Integer.parseInt(el.text());
for(int i=1;i<pageNum;i++){
String pageurl="https://list.jd.com/list.html?tid=1008669"+i;
Connection pageconn=Jsoup.connect(pageurl);
Document pagedoc=pageconn.get();
Elements els=pagedoc.select( ".p-name" );
for(Element pageel:els){
logger.info(pageel.text());
// System.out.println(pageel.text());
}
}
}
@Test
public void fetch_price() throws Exception{
// String url="https://item.jd.com/10033449197336.html";
String url="https://fts.jd.com/prices/mgets?callback=jQuery5281885&skuIds=J_10058349591736";
//根据url获取网页链接对象
Connection conn=Jsoup.connect(url);
/ /因为此时返回不是html页面,所以不能用document来接。
String json=conn.ignoreContentTy2e(true).execute(.body() ;
//价格为jquery链接,需要自己页面找ip,返回json----json解析
//Document doc=conn.get();
//获取目标url的整个网页内容
//价格为jquery----json解析
// Document doc=conn.get();
// Element el = doc.select(".price").select(".J-p-10033449197336").get(0);
// System.out.println(el.text());
}
}